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 }