uber-go / dig
1
// Copyright (c) 2020 Uber Technologies, Inc.
2
//
3
// Permission is hereby granted, free of charge, to any person obtaining a copy
4
// of this software and associated documentation files (the "Software"), to deal
5
// in the Software without restriction, including without limitation the rights
6
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
// copies of the Software, and to permit persons to whom the Software is
8
// furnished to do so, subject to the following conditions:
9
//
10
// The above copyright notice and this permission notice shall be included in
11
// all copies or substantial portions of the Software.
12
//
13
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
// THE SOFTWARE.
20

21
package dig
22

23
import (
24
	"fmt"
25
	"strings"
26
)
27

28
const (
29
	_groupTag = "group"
30
)
31

32
type group struct {
33
	Name    string
34
	Flatten bool
35
}
36

37
type errInvalidGroupOption struct{ Option string }
38

39
func (e errInvalidGroupOption) Error() string {
40 2
	return fmt.Sprintf("invalid option %q", e.Option)
41
}
42

43
func parseGroupString(s string) (group, error) {
44 2
	components := strings.Split(s, ",")
45 2
	g := group{Name: components[0]}
46
	for _, c := range components[1:] {
47 2
		switch c {
48 2
		case "flatten":
49 2
			g.Flatten = true
50 2
		default:
51 2
			return g, errInvalidGroupOption{Option: c}
52
		}
53
	}
54 2
	return g, nil
55
}

Read our documentation on viewing source code .

Loading