github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/meta/incoming.go (about)

     1  package meta
     2  
     3  import (
     4  	"context"
     5  
     6  	"google.golang.org/grpc/metadata"
     7  )
     8  
     9  type (
    10  	MetadataCallback    func(md metadata.MD)
    11  	metadataCallbackKey struct{}
    12  )
    13  
    14  func WithTrailerCallback(ctx context.Context, callback MetadataCallback) context.Context {
    15  	if existingCallback, has := ctx.Value(metadataCallbackKey{}).(MetadataCallback); has {
    16  		return context.WithValue(ctx, metadataCallbackKey{}, MetadataCallback(
    17  			func(md metadata.MD) {
    18  				existingCallback(md)
    19  				callback(md)
    20  			},
    21  		))
    22  	}
    23  
    24  	return context.WithValue(ctx, metadataCallbackKey{}, callback)
    25  }
    26  
    27  func CallTrailerCallback(ctx context.Context, md metadata.MD) {
    28  	if len(md) == 0 {
    29  		return
    30  	}
    31  	callback, has := ctx.Value(metadataCallbackKey{}).(MetadataCallback)
    32  	if !has {
    33  		return
    34  	}
    35  	callback(md)
    36  }