github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/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  }