github.com/InjectiveLabs/sdk-go@v1.53.0/client/common/api_request_assistant.go (about) 1 package common 2 3 import ( 4 "context" 5 6 "google.golang.org/grpc" 7 "google.golang.org/grpc/metadata" 8 ) 9 10 type APICall[Q any, R any] func(ctx context.Context, in *Q, opts ...grpc.CallOption) (*R, error) 11 type APIStreamCall[Q any, S grpc.ClientStream] func(ctx context.Context, in *Q, opts ...grpc.CallOption) (S, error) 12 13 func ExecuteCall[Q any, R any](ctx context.Context, cookieAssistant CookieAssistant, call APICall[Q, R], in *Q) (*R, error) { 14 var header metadata.MD 15 localCtx := metadata.NewOutgoingContext(ctx, cookieAssistant.RealMetadata()) 16 17 response, err := call(localCtx, in, grpc.Header(&header)) 18 19 cookieAssistant.ProcessResponseMetadata(header) 20 21 return response, err 22 } 23 24 func ExecuteStreamCall[Q any, S grpc.ClientStream](ctx context.Context, cookieAssistant CookieAssistant, call APIStreamCall[Q, S], in *Q) (S, error) { 25 localCtx := metadata.NewOutgoingContext(ctx, cookieAssistant.RealMetadata()) 26 27 stream, callError := call(localCtx, in) 28 29 if callError == nil { 30 header, err := stream.Header() 31 if err == nil { 32 cookieAssistant.ProcessResponseMetadata(header) 33 } 34 } 35 36 return stream, callError 37 }