diff --git a/binding/format/protobuf/v2/protobuf.go b/binding/format/protobuf/v2/protobuf.go index e29dababe..4b8c2544b 100644 --- a/binding/format/protobuf/v2/protobuf.go +++ b/binding/format/protobuf/v2/protobuf.go @@ -88,7 +88,12 @@ func ToProto(e *event.Event) (*pb.CloudEvent, error) { container.Attributes[datacontenttype], _ = attributeFor(e.DataContentType()) } if e.DataSchema() != "" { - container.Attributes[dataschema], _ = attributeFor(e.DataSchema()) + dataSchemaStr := e.DataSchema() + uri, err := url.Parse(dataSchemaStr) + if err != nil { + return nil, fmt.Errorf("failed to url.Parse %s: %w", dataSchemaStr, err) + } + container.Attributes[dataschema], _ = attributeFor(uri) } if e.Subject() != "" { container.Attributes[subject], _ = attributeFor(e.Subject()) @@ -251,8 +256,8 @@ func FromProto(container *pb.CloudEvent) (*event.Event, error) { vs, _ := v.(string) e.SetDataContentType(vs) case dataschema: - vs, _ := v.(string) - e.SetDataSchema(vs) + vs, _ := v.(types.URI) + e.SetDataSchema(vs.String()) case subject: vs, _ := v.(string) e.SetSubject(vs) diff --git a/binding/format/protobuf/v2/protobuf_test.go b/binding/format/protobuf/v2/protobuf_test.go index 3b76ae3e5..3099bc4ac 100644 --- a/binding/format/protobuf/v2/protobuf_test.go +++ b/binding/format/protobuf/v2/protobuf_test.go @@ -109,6 +109,7 @@ func TestFromProto(t *testing.T) { Type: "some.type", Attributes: map[string]*pb.CloudEventAttributeValue{ "datacontenttype": {Attr: &pb.CloudEventAttributeValue_CeString{CeString: "application/json"}}, + "dataschema": {Attr: &pb.CloudEventAttributeValue_CeUri{CeUri: "https://example-data-schema.com"}}, "extra1": {Attr: &pb.CloudEventAttributeValue_CeString{CeString: "extra1 value"}}, "extra2": {Attr: &pb.CloudEventAttributeValue_CeInteger{CeInteger: 2}}, "extra3": {Attr: &pb.CloudEventAttributeValue_CeBoolean{CeBoolean: true}}, @@ -124,6 +125,7 @@ func TestFromProto(t *testing.T) { out.SetSource("/source") out.SetType("some.type") _ = out.SetData("application/json", map[string]interface{}{"unit": "test"}) + out.SetDataSchema("https://example-data-schema.com") out.SetExtension("extra1", "extra1 value") out.SetExtension("extra2", 2) out.SetExtension("extra3", true) @@ -140,6 +142,7 @@ func TestFromProto(t *testing.T) { Type: "some.type", Attributes: map[string]*pb.CloudEventAttributeValue{ "datacontenttype": {Attr: &pb.CloudEventAttributeValue_CeString{CeString: "text/plain"}}, + "dataschema": {Attr: &pb.CloudEventAttributeValue_CeUri{CeUri: "https://example-data-schema.com"}}, "extra1": {Attr: &pb.CloudEventAttributeValue_CeString{CeString: "extra1 value"}}, "extra2": {Attr: &pb.CloudEventAttributeValue_CeInteger{CeInteger: 2}}, "extra3": {Attr: &pb.CloudEventAttributeValue_CeBoolean{CeBoolean: true}}, @@ -155,6 +158,7 @@ func TestFromProto(t *testing.T) { out.SetSource("/source") out.SetType("some.type") _ = out.SetData("text/plain", `this is some text with a "quote"`) + out.SetDataSchema("https://example-data-schema.com") out.SetExtension("extra1", "extra1 value") out.SetExtension("extra2", 2) out.SetExtension("extra3", true) @@ -171,6 +175,7 @@ func TestFromProto(t *testing.T) { Type: "some.type", Attributes: map[string]*pb.CloudEventAttributeValue{ "datacontenttype": {Attr: &pb.CloudEventAttributeValue_CeString{CeString: "application/json"}}, + "dataschema": {Attr: &pb.CloudEventAttributeValue_CeUri{CeUri: "https://example-data-schema.com"}}, "extra1": {Attr: &pb.CloudEventAttributeValue_CeString{CeString: "extra1 value"}}, "extra2": {Attr: &pb.CloudEventAttributeValue_CeInteger{CeInteger: 2}}, "extra3": {Attr: &pb.CloudEventAttributeValue_CeBoolean{CeBoolean: true}}, @@ -186,6 +191,7 @@ func TestFromProto(t *testing.T) { out.SetSource("/source") out.SetType("some.type") _ = out.SetData("application/json", `{"unit":"test"}`) + out.SetDataSchema("https://example-data-schema.com") out.SetExtension("extra1", "extra1 value") out.SetExtension("extra2", 2) out.SetExtension("extra3", true)