github.com/peterbale/terraform@v0.9.0-beta2.0.20170315142748-5723acd55547/builtin/providers/circonus/tags.go (about) 1 package circonus 2 3 import ( 4 "log" 5 "strings" 6 7 "github.com/hashicorp/terraform/helper/schema" 8 ) 9 10 type circonusTag string 11 type circonusTags []circonusTag 12 13 // tagMakeConfigSchema returns a schema pointer to the necessary tag structure. 14 func tagMakeConfigSchema(tagAttrName schemaAttr) *schema.Schema { 15 return &schema.Schema{ 16 Type: schema.TypeSet, 17 Optional: true, 18 Elem: &schema.Schema{ 19 Type: schema.TypeString, 20 ValidateFunc: validateTag, 21 }, 22 } 23 } 24 25 func (t circonusTag) Category() string { 26 tagInfo := strings.SplitN(string(t), ":", 2) 27 switch len(tagInfo) { 28 case 1: 29 return string(t) 30 case 2: 31 return tagInfo[0] 32 default: 33 log.Printf("[ERROR]: Invalid category on tag %q", string(t)) 34 return "" 35 } 36 } 37 38 func (t circonusTag) Value() string { 39 tagInfo := strings.SplitN(string(t), ":", 2) 40 switch len(tagInfo) { 41 case 1: 42 return "" 43 case 2: 44 return tagInfo[1] 45 default: 46 log.Printf("[ERROR]: Invalid value on tag %q", string(t)) 47 return "" 48 } 49 } 50 51 func tagsToState(tags circonusTags) *schema.Set { 52 tagSet := schema.NewSet(schema.HashString, nil) 53 for i := range tags { 54 tagSet.Add(string(tags[i])) 55 } 56 return tagSet 57 } 58 59 func apiToTags(apiTags []string) circonusTags { 60 tags := make(circonusTags, 0, len(apiTags)) 61 for _, v := range apiTags { 62 tags = append(tags, circonusTag(v)) 63 } 64 return tags 65 }