1 // Copyright 2014 Google Inc. All rights reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package parser 16 17 import "fmt" 18 19 func AddStringToList(list *List, s string) (modified bool) { 20 for _, v := range list.Values { 21 if v.Type() != StringType { 22 panic(fmt.Errorf("expected string in list, got %s", v.Type())) 23 } 24 25 if sv, ok := v.(*String); ok && sv.Value == s { 26 // string already exists 27 return false 28 } 29 } 30 31 list.Values = append(list.Values, &String{ 32 LiteralPos: list.RBracePos, 33 Value: s, 34 }) 35 36 return true 37 } 38 39 func RemoveStringFromList(list *List, s string) (modified bool) { 40 for i, v := range list.Values { 41 if v.Type() != StringType { 42 panic(fmt.Errorf("expected string in list, got %s", v.Type())) 43 } 44 45 if sv, ok := v.(*String); ok && sv.Value == s { 46 list.Values = append(list.Values[:i], list.Values[i+1:]...) 47 return true 48 } 49 } 50 51 return false 52 } 53