package security import ( "strings" ) // Option contains the name and options of a security option type Option struct { Name string Options []KeyValue } // KeyValue holds a key/value pair. type KeyValue struct { Key, Value string } // DecodeOptions decodes a security options string slice to a // type-safe [Option]. func DecodeOptions(opts []string) []Option { so := make([]Option, 0, len(opts)) for _, opt := range opts { secopt := Option{} for _, s := range strings.Split(opt, ",") { k, v, _ := strings.Cut(s, "=") if k == "" { continue } if k == "name" { secopt.Name = v continue } secopt.Options = append(secopt.Options, KeyValue{Key: k, Value: v}) } if secopt.Name != "" { so = append(so, secopt) } } return so }