From 9b5ac6abf05c291937c879d3ca093d1dba8719a5 Mon Sep 17 00:00:00 2001 From: Aaron Craelius Date: Mon, 23 Jan 2023 12:54:22 -0500 Subject: [PATCH] feat(core): add event service (#14686) --- core/event/service.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 core/event/service.go diff --git a/core/event/service.go b/core/event/service.go new file mode 100644 index 0000000000..5c1087b626 --- /dev/null +++ b/core/event/service.go @@ -0,0 +1,38 @@ +// Package event provides a basic API for app modules to emit events. +package event + +import ( + "context" + + "google.golang.org/protobuf/runtime/protoiface" +) + +// Service represents an event service which can retrieve and set an event manager in a context. +// event.Service is a core API type that should be provided by the runtime module being used to +// build an app via depinject. +type Service interface { + // EmitProtoEvent emits events represented as a protobuf message (as described in ADR 032). + // + // Callers SHOULD assume that these events may be included in consensus. These events + // MUST be emitted deterministically and adding, removing or changing these events SHOULD + // be considered state-machine breaking. + EmitProtoEvent(ctx context.Context, event protoiface.MessageV1) error + + // EmitKVEvent emits an event based on an event and kv-pair attributes. + // + // These events will not be part of consensus and adding, removing or changing these events is + // not a state-machine breaking change. + EmitKVEvent(ctx context.Context, eventType string, attrs ...KVEventAttribute) error + + // EmitProtoEventNonConsensus emits events represented as a protobuf message (as described in ADR 032), without + // including it in blockchain consensus. + // + // These events will not be part of consensus and adding, removing or changing events is + // not a state-machine breaking change. + EmitProtoEventNonConsensus(ctx context.Context, event protoiface.MessageV1) error +} + +// KVEventAttribute is a kv-pair event attribute. +type KVEventAttribute struct { + Key, Value string +}