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
5package edn
6
7import (
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.
13type tagOptions string
14
15// parseTag splits a struct field's json tag into its name and
16// comma-separated options.
17func 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.
27func (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}
45