Skip to content

Commit

Permalink
feat(core): add ADR 033 (inter-module communication) Client interface (
Browse files Browse the repository at this point in the history
…#13631)

Co-authored-by: Marko <[email protected]>
  • Loading branch information
aaronc and tac0turtle authored Oct 25, 2022
1 parent ad08ec4 commit a19c3a6
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions core/intermodule/client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package intermodule

import (
"context"

"google.golang.org/grpc"
)

// Client is an inter-module client as specified in ADR-033. It
// allows one module to send msg's and queries to other modules provided
// that the request is valid and can be properly authenticated.
type Client interface {
grpc.ClientConnInterface

// InvokerByMethod resolves an invoker for the provided method or returns an error.
InvokerByMethod(method string) (Invoker, error)

// InvokerByRequest resolves an invoker for the provided request type or returns an error.
// This only works for Msg's as they are routed based on type name in transactions already.
// For queries use InvokerByMethod instead.
InvokerByRequest(request any) (Invoker, error)

// DerivedClient returns an inter-module client for the ADR-028 derived
// module address for the provided key.
DerivedClient(key []byte) Client

// Address is the ADR-028 address of this client against which messages will be authenticated.
Address() []byte
}

// Invoker is an inter-module invoker that has already been resolved to a specific method route.
type Invoker func(ctx context.Context, request any, opts ...grpc.CallOption) (res any, err error)

0 comments on commit a19c3a6

Please sign in to comment.