41 lines
716 B
Go
41 lines
716 B
Go
package syntax
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// `tls:"head=2,min=2,max=255,varint"`
|
|
|
|
type tagOptions map[string]uint
|
|
|
|
var (
|
|
varintOption = "varint"
|
|
)
|
|
|
|
// parseTag parses a struct field's "tls" tag as a comma-separated list of
|
|
// name=value pairs, where the values MUST be unsigned integers
|
|
func parseTag(tag string) tagOptions {
|
|
opts := tagOptions{}
|
|
for _, token := range strings.Split(tag, ",") {
|
|
if token == varintOption {
|
|
opts[varintOption] = 1
|
|
continue
|
|
}
|
|
|
|
parts := strings.Split(token, "=")
|
|
if len(parts[0]) == 0 {
|
|
continue
|
|
}
|
|
|
|
if len(parts) == 1 {
|
|
continue
|
|
}
|
|
|
|
if val, err := strconv.Atoi(parts[1]); err == nil && val >= 0 {
|
|
opts[parts[0]] = uint(val)
|
|
}
|
|
}
|
|
return opts
|
|
}
|