func copyMetadata()

in grpc/server/responseheader/responseheader.go [21:40]


func copyMetadata(ctx context.Context, metadataToHeader map[string]string) error {
	md, ok := metadata.FromIncomingContext(ctx)
	if !ok {
		return nil
	}
	// Filter and set the allowed metadata as response headers
	filteredMD := metadata.New(nil)
	for key := range metadataToHeader {
		if values, exists := md[key]; exists {
			filteredMD.Set(key, values...)
		}
	}

	// append filteredMD to any existing headers, does not replace the entire header metadata
	// if setHeader called multiple times, all the provided metadata will be merged
	if err := grpc.SetHeader(ctx, filteredMD); err != nil {
		return err
	}
	return nil
}