Files
console/param/params.go
andrey e80e292830
All checks were successful
Go Action / goaction (pull_request) Successful in 45s
move command to folder
2026-01-05 23:23:20 +03:00

58 lines
781 B
Go

package param
//nolint:gochecknoglobals
var eparam = empty{}
func New(opts ...Option) Params {
var param Params
param = eparam
for _, opt := range opts {
param = opt(param)
}
return param
}
type Params interface {
Param(key any) (any, bool)
With(key, val any) Params
}
type Option func(Params) Params
type empty struct{}
func (e empty) Param(any) (any, bool) {
return nil, false
}
func (e empty) With(key, val any) Params {
return data{
parent: e,
key: key,
val: val,
}
}
type data struct {
parent Params
key, val any
}
func (d data) Param(key any) (any, bool) {
if d.key == key {
return d.val, true
}
return d.parent.Param(key)
}
func (d data) With(key, val any) Params {
return data{
parent: d,
key: key,
val: val,
}
}