github.com/kazu/loncha@v0.6.3/opt.go (about) 1 package loncha 2 3 type opParam[T any] struct { 4 Param T 5 } 6 7 // Opt ... functional options of lonch operator 8 type Opt[T any] func(*opParam[T]) Opt[T] 9 10 func (p *opParam[T]) Options(opts ...Opt[T]) (prevs []Opt[T]) { 11 12 for _, opt := range opts { 13 prevs = append(prevs, opt(p)) 14 } 15 return 16 } 17 18 // DefauiltOpt ... default function option 19 func DefauiltOpt[T any]() *opParam[T] { 20 return &opParam[T]{} 21 } 22 23 // MergeOpts ... using innner in function with Opt[T] 24 // this run DefaultOpt() and Options() . 25 func MergeOpts[T any](opts ...Opt[T]) (*opParam[T], func(p *opParam[T])) { 26 27 param := DefauiltOpt[T]() 28 prevs := param.Options(opts...) 29 30 return param, func(p *opParam[T]) { 31 p.Options(prevs...) 32 } 33 }