Skip to content

Commit ab07228

Browse files
committed
fix ut.
Signed-off-by: morvencao <[email protected]>
1 parent d4ad609 commit ab07228

File tree

9 files changed

+256
-90
lines changed

9 files changed

+256
-90
lines changed

protocol/grpc/go.mod

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,25 @@ replace github.com/cloudevents/sdk-go/binding/format/protobuf/v2 => ../../bindin
99
require (
1010
github.com/cloudevents/sdk-go/binding/format/protobuf/v2 v2.14.0
1111
github.com/cloudevents/sdk-go/v2 v2.14.0
12+
github.com/stretchr/testify v1.8.4
1213
google.golang.org/grpc v1.59.0
1314
google.golang.org/protobuf v1.31.0
1415
)
1516

1617
require (
18+
github.com/davecgh/go-spew v1.1.1 // indirect
1719
github.com/golang/protobuf v1.5.3 // indirect
18-
github.com/json-iterator/go v1.1.10 // indirect
19-
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
20-
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 // indirect
21-
go.uber.org/atomic v1.4.0 // indirect
22-
go.uber.org/multierr v1.1.0 // indirect
23-
go.uber.org/zap v1.10.0 // indirect
24-
golang.org/x/net v0.14.0 // indirect
25-
golang.org/x/sys v0.11.0 // indirect
26-
golang.org/x/text v0.12.0 // indirect
27-
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
20+
github.com/google/go-cmp v0.6.0 // indirect
21+
github.com/json-iterator/go v1.1.12 // indirect
22+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
23+
github.com/modern-go/reflect2 v1.0.2 // indirect
24+
github.com/pmezard/go-difflib v1.0.0 // indirect
25+
go.uber.org/atomic v1.11.0 // indirect
26+
go.uber.org/multierr v1.11.0 // indirect
27+
go.uber.org/zap v1.26.0 // indirect
28+
golang.org/x/net v0.18.0 // indirect
29+
golang.org/x/sys v0.14.0 // indirect
30+
golang.org/x/text v0.14.0 // indirect
31+
google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect
32+
gopkg.in/yaml.v3 v3.0.1 // indirect
2833
)

protocol/grpc/go.sum

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,38 +6,67 @@ github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg
66
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
77
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
88
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
9+
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
10+
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
11+
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
912
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
1013
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
1114
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
15+
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
16+
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
17+
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
1218
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
1319
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
20+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
21+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
1422
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
1523
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
24+
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
25+
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
26+
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
1627
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
1728
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
1829
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
1930
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
2031
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
21-
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
32+
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
33+
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
2234
go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU=
2335
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
36+
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
37+
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
2438
go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
2539
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
40+
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
41+
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
2642
go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM=
2743
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
28-
golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14=
29-
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
30-
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
31-
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
32-
golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc=
33-
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
44+
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
45+
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
46+
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
47+
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
48+
golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
49+
golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
50+
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
51+
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
52+
golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
53+
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
54+
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
55+
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
56+
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
57+
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
3458
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
3559
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
3660
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
61+
google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 h1:Jyp0Hsi0bmHXG6k9eATXoYtjd6e2UzZ1SCn/wIupY14=
62+
google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA=
3763
google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
3864
google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
3965
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
4066
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
4167
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
4268
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
69+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
70+
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
4371
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
72+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

protocol/grpc/message.go

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ import (
2222
const (
2323
prefix = "ce-"
2424
contenttype = "contenttype"
25-
dataSchema = "dataschema"
26-
subject = "subject"
27-
time = "time"
25+
// dataSchema = "dataschema"
26+
subject = "subject"
27+
time = "time"
2828
)
2929

3030
var specs = spec.WithPrefix(prefix)
@@ -72,9 +72,6 @@ func (m *Message) ReadEncoding() binding.Encoding {
7272
}
7373

7474
func (m *Message) ReadStructured(ctx context.Context, encoder binding.StructuredWriter) error {
75-
if m.version != nil {
76-
return binding.ErrNotStructured
77-
}
7875
if m.format == nil {
7976
return binding.ErrNotStructured
8077
}
@@ -83,11 +80,15 @@ func (m *Message) ReadStructured(ctx context.Context, encoder binding.Structured
8380
}
8481

8582
func (m *Message) ReadBinary(ctx context.Context, encoder binding.BinaryWriter) error {
83+
if m.version == nil {
84+
return binding.ErrNotBinary
85+
}
86+
8687
if m.format != nil {
8788
return binding.ErrNotBinary
8889
}
8990

90-
if m.internal.SpecVersion == "" {
91+
if m.internal.SpecVersion != "" {
9192
err := encoder.SetAttribute(m.version.AttributeFromKind(spec.SpecVersion), m.internal.SpecVersion)
9293
if err != nil {
9394
return err
@@ -113,29 +114,26 @@ func (m *Message) ReadBinary(ctx context.Context, encoder binding.BinaryWriter)
113114
}
114115

115116
for name, value := range m.internal.Attributes {
116-
v, err := valueFrom(value)
117+
attrVal, err := valueFrom(value)
117118
if err != nil {
118119
return fmt.Errorf("failed to convert attribute %s: %s", name, err)
119120
}
120121

121122
if strings.HasPrefix(name, prefix) {
122123
attr := m.version.Attribute(name)
123124
if attr != nil {
124-
switch attr.Kind() {
125-
case spec.DataContentType, spec.DataSchema, spec.Subject, spec.Time:
126-
err = encoder.SetAttribute(attr, v)
127-
if err != nil {
128-
return err
129-
}
125+
err = encoder.SetAttribute(attr, attrVal)
126+
if err != nil {
127+
return err
130128
}
131129
} else {
132-
err = encoder.SetExtension(strings.TrimPrefix(name, prefix), v)
130+
err = encoder.SetExtension(strings.TrimPrefix(name, prefix), attrVal)
133131
if err != nil {
134132
return err
135133
}
136134
}
137135
} else if name == contenttype {
138-
err = encoder.SetAttribute(m.version.AttributeFromKind(spec.DataContentType), v)
136+
err = encoder.SetAttribute(m.version.AttributeFromKind(spec.DataContentType), attrVal)
139137
if err != nil {
140138
return err
141139
}

protocol/grpc/message_test.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
Copyright 2023 The CloudEvents Authors
3+
SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package grpc
7+
8+
import (
9+
"context"
10+
"testing"
11+
12+
"github.com/cloudevents/sdk-go/binding/format/protobuf/v2/pb"
13+
"github.com/cloudevents/sdk-go/v2/binding"
14+
"github.com/cloudevents/sdk-go/v2/event"
15+
)
16+
17+
func TestReadStructured(t *testing.T) {
18+
tests := []struct {
19+
name string
20+
msg *pb.CloudEvent
21+
wantErr error
22+
}{
23+
{
24+
name: "nil format",
25+
msg: &pb.CloudEvent{},
26+
wantErr: binding.ErrNotStructured,
27+
},
28+
{
29+
name: "json format",
30+
msg: &pb.CloudEvent{
31+
Attributes: map[string]*pb.CloudEventAttributeValue{
32+
contenttype: &pb.CloudEventAttributeValue{
33+
Attr: &pb.CloudEventAttributeValue_CeString{
34+
CeString: event.ApplicationCloudEventsJSON,
35+
},
36+
},
37+
},
38+
},
39+
},
40+
}
41+
for _, tc := range tests {
42+
t.Run(tc.name, func(t *testing.T) {
43+
msg := NewMessage(tc.msg)
44+
err := msg.ReadStructured(context.Background(), (*pbEventWriter)(tc.msg))
45+
if err != tc.wantErr {
46+
t.Errorf("Error unexpected. got: %v, want: %v", err, tc.wantErr)
47+
}
48+
})
49+
}
50+
}
51+
52+
func TestReadBinary(t *testing.T) {
53+
msg := &pb.CloudEvent{
54+
SpecVersion: "1.0",
55+
Id: "ABC-123",
56+
Source: "test-source",
57+
Type: "binary.test",
58+
Attributes: map[string]*pb.CloudEventAttributeValue{},
59+
Data: &pb.CloudEvent_BinaryData{
60+
BinaryData: []byte("{hello:world}"),
61+
},
62+
}
63+
64+
message := NewMessage(msg)
65+
err := message.ReadBinary(context.Background(), (*pbEventWriter)(msg))
66+
if err != nil {
67+
t.Errorf("Error unexpected. got: %v", err)
68+
}
69+
}

protocol/grpc/protocol.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ func (p *Protocol) Send(ctx context.Context, m binding.Message, transformers ...
8181
defer m.Finish(err)
8282

8383
msg := &pb.CloudEvent{}
84-
err = WritePubMessage(ctx, m, msg, transformers...)
84+
err = WritePBMessage(ctx, m, msg, transformers...)
8585
if err != nil {
8686
return err
8787
}

protocol/grpc/write_message.go

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ import (
1919
"google.golang.org/protobuf/types/known/timestamppb"
2020
)
2121

22-
// WritePubMessage fills the provided pubMessage with the message m.
22+
// WritePBMessage fills the provided pubMessage with the message m.
2323
// Using context you can tweak the encoding processing (more details on binding.Write documentation).
24-
func WritePubMessage(ctx context.Context, m binding.Message, pbEvt *pb.CloudEvent, transformers ...binding.Transformer) error {
24+
func WritePBMessage(ctx context.Context, m binding.Message, pbEvt *pb.CloudEvent, transformers ...binding.Transformer) error {
2525
structuredWriter := (*pbEventWriter)(pbEvt)
2626
binaryWriter := (*pbEventWriter)(pbEvt)
2727

@@ -100,70 +100,81 @@ func (b *pbEventWriter) SetAttribute(attribute spec.Attribute, value interface{}
100100
return fmt.Errorf("invalid SpecVersion type, expected string got %T", value)
101101
}
102102
b.SpecVersion = val
103-
return nil
104103
case spec.ID:
105104
val, ok := value.(string)
106105
if !ok {
107106
return fmt.Errorf("invalid ID type, expected string got %T", value)
108107
}
109108
b.Id = val
110-
return nil
111109
case spec.Source:
112110
val, ok := value.(string)
113111
if !ok {
114112
return fmt.Errorf("invalid Source type, expected string got %T", value)
115113
}
116114
b.Source = val
117-
return nil
118115
case spec.Type:
119116
val, ok := value.(string)
120117
if !ok {
121118
return fmt.Errorf("invalid Type type, expected string got %T", value)
122119
}
123120
b.Type = val
124-
return nil
125121
case spec.DataContentType:
126122
if value == nil {
127123
delete(b.Attributes, contenttype)
124+
} else {
125+
attrVal, err := attributeFor(value)
126+
if err != nil {
127+
return err
128+
}
129+
b.Attributes[contenttype] = attrVal
128130
}
129-
b.Attributes[contenttype], _ = attributeFor(value)
130-
return nil
131-
case spec.DataSchema:
132-
if value == nil {
133-
delete(b.Attributes, prefix+dataSchema)
134-
}
135-
b.Attributes[prefix+dataSchema], _ = attributeFor(value)
136-
return nil
137131
case spec.Subject:
138132
if value == nil {
139133
delete(b.Attributes, prefix+subject)
134+
} else {
135+
attrVal, err := attributeFor(value)
136+
if err != nil {
137+
return err
138+
}
139+
b.Attributes[prefix+subject] = attrVal
140140
}
141-
b.Attributes[prefix+subject], _ = attributeFor(value)
142-
return nil
143141
case spec.Time:
144142
if value == nil {
145143
delete(b.Attributes, prefix+time)
144+
} else {
145+
attrVal, err := attributeFor(value)
146+
if err != nil {
147+
return err
148+
}
149+
b.Attributes[prefix+time] = attrVal
146150
}
147-
b.Attributes[prefix+time], _ = attributeFor(value)
148-
return nil
149151
default:
150152
if value == nil {
151153
delete(b.Attributes, prefix+attribute.Name())
154+
} else {
155+
attrVal, err := attributeFor(value)
156+
if err != nil {
157+
return err
158+
}
159+
b.Attributes[prefix+attribute.Name()] = attrVal
152160
}
153-
b.Attributes[prefix+attribute.Name()], _ = attributeFor(value)
154161
}
155162

156163
return nil
157164
}
158165

159-
func (b *pbEventWriter) SetExtension(name string, value interface{}) (err error) {
166+
func (b *pbEventWriter) SetExtension(name string, value interface{}) error {
160167
if value == nil {
161168
delete(b.Attributes, prefix+name)
169+
} else {
170+
attrVal, err := attributeFor(value)
171+
if err != nil {
172+
return err
173+
}
174+
b.Attributes[prefix+name] = attrVal
162175
}
163176

164-
b.Attributes[prefix+name], err = attributeFor(value)
165-
166-
return
177+
return nil
167178
}
168179

169180
func attributeFor(v interface{}) (*pb.CloudEventAttributeValue, error) {

0 commit comments

Comments
 (0)