github.com/ferranbt/nomad@v0.9.3-0.20190607002617-85c449b7667c/plugins/shared/hclspec/spec.go (about)

     1  package hclspec
     2  
     3  // ObjectSpec wraps the object and returns a spec.
     4  func ObjectSpec(obj *Object) *Spec {
     5  	return &Spec{
     6  		Block: &Spec_Object{
     7  			Object: obj,
     8  		},
     9  	}
    10  }
    11  
    12  // ArraySpec wraps the array and returns a spec.
    13  func ArraySpec(array *Array) *Spec {
    14  	return &Spec{
    15  		Block: &Spec_Array{
    16  			Array: array,
    17  		},
    18  	}
    19  }
    20  
    21  // AttrSpec wraps the attr and returns a spec.
    22  func AttrSpec(attr *Attr) *Spec {
    23  	return &Spec{
    24  		Block: &Spec_Attr{
    25  			Attr: attr,
    26  		},
    27  	}
    28  }
    29  
    30  // BlockSpec wraps the block and returns a spec.
    31  func BlockSpec(block *Block) *Spec {
    32  	return &Spec{
    33  		Block: &Spec_BlockValue{
    34  			BlockValue: block,
    35  		},
    36  	}
    37  }
    38  
    39  // BlockAttrsSpec wraps the block attrs and returns a spec.
    40  func BlockAttrsSpec(blockAttrs *BlockAttrs) *Spec {
    41  	return &Spec{
    42  		Block: &Spec_BlockAttrs{
    43  			BlockAttrs: blockAttrs,
    44  		},
    45  	}
    46  }
    47  
    48  // BlockListSpec wraps the block list and returns a spec.
    49  func BlockListSpec(blockList *BlockList) *Spec {
    50  	return &Spec{
    51  		Block: &Spec_BlockList{
    52  			BlockList: blockList,
    53  		},
    54  	}
    55  }
    56  
    57  // BlockSetSpec wraps the block set and returns a spec.
    58  func BlockSetSpec(blockSet *BlockSet) *Spec {
    59  	return &Spec{
    60  		Block: &Spec_BlockSet{
    61  			BlockSet: blockSet,
    62  		},
    63  	}
    64  }
    65  
    66  // BlockMapSpec wraps the block map and returns a spec.
    67  func BlockMapSpec(blockMap *BlockMap) *Spec {
    68  	return &Spec{
    69  		Block: &Spec_BlockMap{
    70  			BlockMap: blockMap,
    71  		},
    72  	}
    73  }
    74  
    75  // DefaultSpec wraps the default and returns a spec.
    76  func DefaultSpec(d *Default) *Spec {
    77  	return &Spec{
    78  		Block: &Spec_Default{
    79  			Default: d,
    80  		},
    81  	}
    82  }
    83  
    84  // LiteralSpec wraps the literal and returns a spec.
    85  func LiteralSpec(l *Literal) *Spec {
    86  	return &Spec{
    87  		Block: &Spec_Literal{
    88  			Literal: l,
    89  		},
    90  	}
    91  }
    92  
    93  // NewObject returns a new object spec.
    94  func NewObject(attrs map[string]*Spec) *Spec {
    95  	return ObjectSpec(&Object{
    96  		Attributes: attrs,
    97  	})
    98  }
    99  
   100  // NewAttr returns a new attribute spec.
   101  func NewAttr(name, attrType string, required bool) *Spec {
   102  	return AttrSpec(&Attr{
   103  		Name:     name,
   104  		Type:     attrType,
   105  		Required: required,
   106  	})
   107  }
   108  
   109  // NewBlock returns a new block spec.
   110  func NewBlock(name string, required bool, nested *Spec) *Spec {
   111  	return BlockSpec(&Block{
   112  		Name:     name,
   113  		Required: required,
   114  		Nested:   nested,
   115  	})
   116  }
   117  
   118  // NewBlockAttrs returns a new block attrs spec
   119  func NewBlockAttrs(name, elementType string, required bool) *Spec {
   120  	return BlockAttrsSpec(&BlockAttrs{
   121  		Name:     name,
   122  		Required: required,
   123  		Type:     elementType,
   124  	})
   125  }
   126  
   127  // NewBlockList returns a new block list spec that has no limits.
   128  func NewBlockList(name string, nested *Spec) *Spec {
   129  	return NewBlockListLimited(name, 0, 0, nested)
   130  }
   131  
   132  // NewBlockListLimited returns a new block list spec that limits the number of
   133  // blocks.
   134  func NewBlockListLimited(name string, min, max uint64, nested *Spec) *Spec {
   135  	return BlockListSpec(&BlockList{
   136  		Name:     name,
   137  		MinItems: min,
   138  		MaxItems: max,
   139  		Nested:   nested,
   140  	})
   141  }
   142  
   143  // NewBlockSet returns a new block set spec that has no limits.
   144  func NewBlockSet(name string, nested *Spec) *Spec {
   145  	return NewBlockSetLimited(name, 0, 0, nested)
   146  }
   147  
   148  // NewBlockSetLimited returns a new block set spec that limits the number of
   149  // blocks.
   150  func NewBlockSetLimited(name string, min, max uint64, nested *Spec) *Spec {
   151  	return BlockSetSpec(&BlockSet{
   152  		Name:     name,
   153  		MinItems: min,
   154  		MaxItems: max,
   155  		Nested:   nested,
   156  	})
   157  }
   158  
   159  // NewBlockMap returns a new block map spec.
   160  func NewBlockMap(name string, labels []string, nested *Spec) *Spec {
   161  	return BlockMapSpec(&BlockMap{
   162  		Name:   name,
   163  		Labels: labels,
   164  		Nested: nested,
   165  	})
   166  }
   167  
   168  // NewLiteral returns a new literal spec.
   169  func NewLiteral(value string) *Spec {
   170  	return LiteralSpec(&Literal{
   171  		Value: value,
   172  	})
   173  }
   174  
   175  // NewDefault returns a new default spec.
   176  func NewDefault(primary, defaultValue *Spec) *Spec {
   177  	return DefaultSpec(&Default{
   178  		Primary: primary,
   179  		Default: defaultValue,
   180  	})
   181  }
   182  
   183  // NewArray returns a new array spec.
   184  func NewArray(values []*Spec) *Spec {
   185  	return ArraySpec(&Array{
   186  		Values: values,
   187  	})
   188  }