| // Copyright 2017 Michal Witkowski. All Rights Reserved. |
| // See LICENSE for licensing terms. |
| |
| package grpc_ctxtags |
| |
| var ( |
| defaultOptions = &options{ |
| requestFieldsFunc: nil, |
| } |
| ) |
| |
| type options struct { |
| requestFieldsFunc RequestFieldExtractorFunc |
| requestFieldsFromInitial bool |
| } |
| |
| func evaluateOptions(opts []Option) *options { |
| optCopy := &options{} |
| *optCopy = *defaultOptions |
| for _, o := range opts { |
| o(optCopy) |
| } |
| return optCopy |
| } |
| |
| type Option func(*options) |
| |
| // WithFieldExtractor customizes the function for extracting log fields from protobuf messages, for |
| // unary and server-streamed methods only. |
| func WithFieldExtractor(f RequestFieldExtractorFunc) Option { |
| return func(o *options) { |
| o.requestFieldsFunc = f |
| } |
| } |
| |
| // WithFieldExtractorForInitialReq customizes the function for extracting log fields from protobuf messages, |
| // for all unary and streaming methods. For client-streams and bidirectional-streams, the tags will be |
| // extracted from the first message from the client. |
| func WithFieldExtractorForInitialReq(f RequestFieldExtractorFunc) Option { |
| return func(o *options) { |
| o.requestFieldsFunc = f |
| o.requestFieldsFromInitial = true |
| } |
| } |