@@ -6,12 +6,15 @@ import (
66 "maps"
77
88 "github.com/smartcontractkit/chainlink-common/pkg/chipingress"
9+ "google.golang.org/protobuf/proto"
910)
1011
1112type ChipIngressEmitter struct {
1213 client chipingress.Client
1314}
1415
16+ var _ Emitter = (* ChipIngressEmitter )(nil )
17+
1518func NewChipIngressEmitter (client chipingress.Client ) (Emitter , error ) {
1619
1720 if client == nil {
@@ -26,36 +29,52 @@ func (c *ChipIngressEmitter) Close() error {
2629}
2730
2831func (c * ChipIngressEmitter ) Emit (ctx context.Context , body []byte , attrKVs ... any ) error {
29- return c .BatchEmit (ctx , NewMessage (body , attrKVs ... ))
32+ _ , err := c .BatchEmit (ctx , []Message {
33+ NewMessage (body , attrKVs ... ),
34+ })
35+ return err
3036}
3137
32- func (c * ChipIngressEmitter ) BatchEmit (ctx context.Context , messages ... Message ) error {
38+ func (c * ChipIngressEmitter ) BatchEmit (ctx context.Context , messages []Message , options ... BatchEmitOption ) ([]* chipingress.PublishResult , error ) {
39+ emitOpts := DefaultBatchEmitOptions
40+ for _ , opt := range options {
41+ opt (& emitOpts )
42+ }
43+
3344 events := make ([]chipingress.CloudEvent , len (messages ))
3445 for i , msg := range messages {
3546 sourceDomain , entityType , err := ExtractSourceAndType (msg .Attrs )
3647 if err != nil {
37- return err
48+ return nil , err
3849 }
3950
4051 event , err := chipingress .NewEvent (sourceDomain , entityType , msg .Body , msg .Attrs )
4152 if err != nil {
42- return err
53+ return nil , err
4354 }
4455
4556 events [i ] = event
4657 }
4758
4859 eventPb , err := chipingress .EventsToBatch (events )
4960 if err != nil {
50- return fmt .Errorf ("failed to convert event to proto: %w" , err )
61+ return nil , fmt .Errorf ("failed to convert event to proto: %w" , err )
5162 }
5263
53- _ , err = c .client .PublishBatch (ctx , eventPb )
64+ eventPb .Options = & chipingress.PublishOptions {
65+ AllOrNothing : proto .Bool (emitOpts .AllOrNothing ),
66+ }
67+
68+ response , err := c .client .PublishBatch (ctx , eventPb )
5469 if err != nil {
55- return err
70+ return nil , err
71+ }
72+
73+ if response == nil {
74+ return nil , nil
5675 }
5776
58- return nil
77+ return response . Results , nil
5978}
6079
6180// ExtractSourceAndType extracts source domain and entity from the attributes
0 commit comments