package params import "errors" var ( ErrParamNotFound = errors.New("parameter not found") ) type Registration struct { Name string ShortHand string Description string DefaultFunc func() string ParseFunc ParseFn } type ParseFn func(value string) (any, error) var ParseString ParseFn = func(value string) (any, error) { return value, nil } type Container struct { params map[string]Value } type Value struct { value *string parseFn ParseFn } func (c *Container) Register(key string, parseFn ParseFn) *string { if c.params == nil { c.params = make(map[string]Value) } item, exists := c.params[key] if exists { return item.value } var str string value := Value{ parseFn: parseFn, value: &str, } c.params[key] = value return value.value } func (c *Container) GetValue(key string) (any, error) { item, exists := c.params[key] if !exists { return nil, ErrParamNotFound } return item.parseFn(*item.value) }