github.com/ltltlt/go-source-code@v0.0.0-20190830023027-95be009773aa/encoding/json/tags.go (about) 1 // Copyright 2011 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package json 6 7 import ( 8 "strings" 9 ) 10 11 // tagOptions is the string following a comma in a struct field's "json" 12 // tag, or the empty string. It does not include the leading comma. 13 type tagOptions string 14 15 // parseTag splits a struct field's json tag into its name and 16 // comma-separated options. 17 func parseTag(tag string) (string, tagOptions) { 18 if idx := strings.Index(tag, ","); idx != -1 { 19 return tag[:idx], tagOptions(tag[idx+1:]) 20 } 21 return tag, tagOptions("") 22 } 23 24 // Contains reports whether a comma-separated list of options 25 // contains a particular substr flag. substr must be surrounded by a 26 // string boundary or commas. 27 func (o tagOptions) Contains(optionName string) bool { 28 if len(o) == 0 { 29 return false 30 } 31 s := string(o) 32 for s != "" { 33 var next string 34 i := strings.Index(s, ",") 35 if i >= 0 { 36 s, next = s[:i], s[i+1:] 37 } 38 if s == optionName { 39 return true 40 } 41 s = next 42 } 43 return false 44 }