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  }