31 lines
642 B
Go
31 lines
642 B
Go
|
package interceptor
|
||
|
|
||
|
// Registry is a collector for interceptors.
|
||
|
type Registry struct {
|
||
|
factories []Factory
|
||
|
}
|
||
|
|
||
|
// Add adds a new Interceptor to the registry.
|
||
|
func (r *Registry) Add(f Factory) {
|
||
|
r.factories = append(r.factories, f)
|
||
|
}
|
||
|
|
||
|
// Build constructs a single Interceptor from a InterceptorRegistry
|
||
|
func (r *Registry) Build(id string) (Interceptor, error) {
|
||
|
if len(r.factories) == 0 {
|
||
|
return &NoOp{}, nil
|
||
|
}
|
||
|
|
||
|
interceptors := []Interceptor{}
|
||
|
for _, f := range r.factories {
|
||
|
i, err := f.NewInterceptor(id)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
interceptors = append(interceptors, i)
|
||
|
}
|
||
|
|
||
|
return NewChain(interceptors), nil
|
||
|
}
|