44 lines
962 B
Go
44 lines
962 B
Go
// Copyright 2017 David Ackroyd. All Rights Reserved.
|
|
// See LICENSE for licensing terms.
|
|
|
|
package grpc_recovery
|
|
|
|
import "context"
|
|
|
|
var (
|
|
defaultOptions = &options{
|
|
recoveryHandlerFunc: nil,
|
|
}
|
|
)
|
|
|
|
type options struct {
|
|
recoveryHandlerFunc RecoveryHandlerFuncContext
|
|
}
|
|
|
|
func evaluateOptions(opts []Option) *options {
|
|
optCopy := &options{}
|
|
*optCopy = *defaultOptions
|
|
for _, o := range opts {
|
|
o(optCopy)
|
|
}
|
|
return optCopy
|
|
}
|
|
|
|
type Option func(*options)
|
|
|
|
// WithRecoveryHandler customizes the function for recovering from a panic.
|
|
func WithRecoveryHandler(f RecoveryHandlerFunc) Option {
|
|
return func(o *options) {
|
|
o.recoveryHandlerFunc = RecoveryHandlerFuncContext(func(ctx context.Context, p interface{}) error {
|
|
return f(p)
|
|
})
|
|
}
|
|
}
|
|
|
|
// WithRecoveryHandlerContext customizes the function for recovering from a panic.
|
|
func WithRecoveryHandlerContext(f RecoveryHandlerFuncContext) Option {
|
|
return func(o *options) {
|
|
o.recoveryHandlerFunc = f
|
|
}
|
|
}
|