Peter Kurfer
7c2a41ad25
- apply changes in proxy plugin and TLS interceptor - add HTTPS proxy support - move ca-generation command to main app - minor refactoring to improve API stability - move mocks to extra packages to avoid cycling imports - fix bug in multi-port configuration - change HTTP proxy to redirect to HTTP mock instead of maintaining custom rules
43 lines
757 B
Go
43 lines
757 B
Go
package defaulting
|
|
|
|
import (
|
|
"reflect"
|
|
)
|
|
|
|
type Defaulter func(instance interface{})
|
|
|
|
type Registry interface {
|
|
Register(t reflect.Type, defaulter ...Defaulter)
|
|
Apply(instance interface{})
|
|
}
|
|
|
|
func New() Registry {
|
|
return ®istry{
|
|
defaulters: make(map[reflect.Type][]Defaulter),
|
|
}
|
|
}
|
|
|
|
type registry struct {
|
|
defaulters map[reflect.Type][]Defaulter
|
|
}
|
|
|
|
func (r *registry) Register(t reflect.Type, defaulter ...Defaulter) {
|
|
var given []Defaulter
|
|
if r, ok := r.defaulters[t]; ok {
|
|
given = r
|
|
}
|
|
|
|
for _, d := range defaulter {
|
|
given = append(given, d)
|
|
}
|
|
|
|
r.defaulters[t] = given
|
|
}
|
|
|
|
func (r *registry) Apply(instance interface{}) {
|
|
if defs, ok := r.defaulters[reflect.TypeOf(instance)]; ok {
|
|
for _, def := range defs {
|
|
def(instance)
|
|
}
|
|
}
|
|
}
|