7
"github.com/crc-org/vfkit/pkg/util"
10
// -- stringSlice Value
11
type stringSliceValue struct {
16
type strvBuilder struct {
17
strBuilder strings.Builder
22
func (builder *strvBuilder) String() string {
23
str := builder.strBuilder.String()
24
// "a","b" is parsed as { "a", "b" } to match pflag StringSlice behaviour
25
return util.TrimQuotes(str)
28
func (builder *strvBuilder) Next() {
29
str := builder.String()
30
builder.strv = append(builder.strv, str)
31
builder.strBuilder.Reset()
34
func (builder *strvBuilder) WriteRune(r rune) {
35
if builder.err != nil {
38
_, err := builder.strBuilder.WriteRune(r)
44
func (builder *strvBuilder) End() ([]string, error) {
45
if builder.err != nil {
46
return nil, builder.err
49
lastStr := builder.String()
50
if len(builder.strv) != 0 || len(lastStr) != 0 {
51
builder.strv = append(builder.strv, lastStr)
54
return builder.strv, nil
57
func parseString(str string) ([]string, error) {
60
// trim spaces from str
61
builder := strvBuilder{}
62
for _, c := range str {
71
return nil, fmt.Errorf("Coding error in arg parsing")
79
// FIXME: can we get ' ' at this point??
85
return nil, fmt.Errorf("Mismatched \"")
91
func (s *stringSliceValue) Set(val string) error {
92
v, err := parseString(val)
99
s.value = append(s.value, v...)
105
func (s *stringSliceValue) Type() string {
109
func (s *stringSliceValue) String() string {
110
if s == nil || s.value == nil {
113
return "[" + strings.Join(s.value, ",") + "]"
116
func (s *stringSliceValue) Append(val string) error {
117
s.value = append(s.value, val)
121
func (s *stringSliceValue) Replace(val []string) error {
126
func (s *stringSliceValue) GetSlice() []string {