github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/scanners/cloudformation/parser/parameter.go (about)

     1  package parser
     2  
     3  import (
     4  	"strconv"
     5  
     6  	"github.com/khulnasoft-lab/defsec/pkg/scanners/cloudformation/cftypes"
     7  
     8  	"github.com/liamg/jfather"
     9  	"gopkg.in/yaml.v3"
    10  )
    11  
    12  type Parameter struct {
    13  	inner parameterInner
    14  }
    15  
    16  type parameterInner struct {
    17  	Type    string      `yaml:"Type"`
    18  	Default interface{} `yaml:"Default"`
    19  }
    20  
    21  func (p *Parameter) UnmarshalYAML(node *yaml.Node) error {
    22  	return node.Decode(&p.inner)
    23  }
    24  
    25  func (p *Parameter) UnmarshalJSONWithMetadata(node jfather.Node) error {
    26  	return node.Decode(&p.inner)
    27  }
    28  
    29  func (p *Parameter) Type() cftypes.CfType {
    30  	switch p.inner.Type {
    31  	case "Boolean":
    32  		return cftypes.Bool
    33  	case "String":
    34  		return cftypes.String
    35  	case "Integer":
    36  		return cftypes.Int
    37  	default:
    38  		return cftypes.String
    39  	}
    40  }
    41  
    42  func (p *Parameter) Default() interface{} {
    43  	return p.inner.Default
    44  }
    45  
    46  func (p *Parameter) UpdateDefault(inVal interface{}) {
    47  	passedVal := inVal.(string)
    48  
    49  	switch p.inner.Type {
    50  	case "Boolean":
    51  		p.inner.Default, _ = strconv.ParseBool(passedVal)
    52  	case "String":
    53  		p.inner.Default = passedVal
    54  	case "Integer":
    55  		p.inner.Default, _ = strconv.Atoi(passedVal)
    56  	default:
    57  		p.inner.Default = passedVal
    58  	}
    59  }