package ber import ( "strconv" "strings" ) type fieldParams struct { optional bool explicit bool application bool contextSpecific bool defaultValue *int64 tag *int stringType Tag set bool omitEmpty bool } func parseFiledParams(s string) (fp fieldParams) { for _, part := range strings.Split(s, ",") { switch { case part == "optional": fp.optional = true case part == "explicit": fp.explicit = true case part == "ia5": fp.stringType = tagIA5String case part == "printable": fp.stringType = tagPrintableString case part == "utf8": fp.stringType = tagUTF8String case strings.HasPrefix(part, "default:"): i, err := strconv.ParseInt(part[8:], 10, 64) if err == nil { fp.defaultValue = new(int64) *fp.defaultValue = i } case strings.HasPrefix(part, "tag:"): i, err := strconv.Atoi(part[4:]) if err == nil { fp.tag = new(int) *fp.tag = i } case part == "set": fp.set = true case part == "application": fp.application = true if fp.tag == nil { fp.tag = new(int) } case part == "context": fp.contextSpecific = true if fp.tag == nil { fp.tag = new(int) } case part == "omitempty": fp.omitEmpty = true } } return }