30 lines
586 B
Go
30 lines
586 B
Go
package admission
|
|
|
|
import "context"
|
|
|
|
type Options struct{}
|
|
type Option func(opts *Options)
|
|
|
|
type Admission interface {
|
|
Admit(ctx context.Context, addr string, opts ...Option) bool
|
|
}
|
|
|
|
type admissionGroup struct {
|
|
admissions []Admission
|
|
}
|
|
|
|
func AdmissionGroup(admissions ...Admission) Admission {
|
|
return &admissionGroup{
|
|
admissions: admissions,
|
|
}
|
|
}
|
|
|
|
func (p *admissionGroup) Admit(ctx context.Context, addr string, opts ...Option) bool {
|
|
for _, admission := range p.admissions {
|
|
if admission != nil && !admission.Admit(ctx, addr, opts...) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|