Home | History | Annotate | Download | only in parser
      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