package formatters import ( "context" "errors" "codeberg.org/danjones000/my-log/config" ) type formatMaker func(config map[string]any) (Formatter, error) var formatterMap = map[string]formatMaker{ "plain": newPlain, "json": newJson, "zero": newNull, } func Preferred(ctx context.Context) (f Formatter, err error) { v, _ := config.RetrieveFromContext(ctx) format := v.GetString("output.stdout.config.format") return New(ctx, format) } func New(ctx context.Context, kind string) (f Formatter, err error) { _, c := config.RetrieveFromContext(ctx) conf := c.Formatters if make, ok := formatterMap[kind]; ok { var formatterConf map[string]any if cf, ok := conf[kind]; ok { formatterConf = cf } return make(formatterConf) } return nil, errors.New("unimplemented") } func Kinds() []string { r := []string{} for kind, _ := range formatterMap { r = append(r, kind) } return r }