github.com/pulumi/pulumi-aws/sdk/v6@v6.32.0/go/aws/internal/pulumiUtilities.go (about) 1 // Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. 2 // *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** 3 4 package internal 5 6 import ( 7 "fmt" 8 "os" 9 "reflect" 10 "regexp" 11 "strconv" 12 "strings" 13 14 "github.com/blang/semver" 15 "github.com/pulumi/pulumi/sdk/v3/go/pulumi" 16 ) 17 18 import ( 19 "github.com/pulumi/pulumi/sdk/v3/go/pulumi/internals" 20 ) 21 22 type envParser func(v string) interface{} 23 24 func ParseEnvBool(v string) interface{} { 25 b, err := strconv.ParseBool(v) 26 if err != nil { 27 return nil 28 } 29 return b 30 } 31 32 func ParseEnvInt(v string) interface{} { 33 i, err := strconv.ParseInt(v, 0, 0) 34 if err != nil { 35 return nil 36 } 37 return int(i) 38 } 39 40 func ParseEnvFloat(v string) interface{} { 41 f, err := strconv.ParseFloat(v, 64) 42 if err != nil { 43 return nil 44 } 45 return f 46 } 47 48 func ParseEnvStringArray(v string) interface{} { 49 var result pulumi.StringArray 50 for _, item := range strings.Split(v, ";") { 51 result = append(result, pulumi.String(item)) 52 } 53 return result 54 } 55 56 func GetEnvOrDefault(def interface{}, parser envParser, vars ...string) interface{} { 57 for _, v := range vars { 58 if value, ok := os.LookupEnv(v); ok { 59 if parser != nil { 60 return parser(value) 61 } 62 return value 63 } 64 } 65 return def 66 } 67 68 // PkgVersion uses reflection to determine the version of the current package. 69 // If a version cannot be determined, v1 will be assumed. The second return 70 // value is always nil. 71 func PkgVersion() (semver.Version, error) { 72 // emptyVersion defaults to v0.0.0 73 if !SdkVersion.Equals(semver.Version{}) { 74 return SdkVersion, nil 75 } 76 type sentinal struct{} 77 pkgPath := reflect.TypeOf(sentinal{}).PkgPath() 78 re := regexp.MustCompile("^.*/pulumi-aws/sdk(/v\\d+)?") 79 if match := re.FindStringSubmatch(pkgPath); match != nil { 80 vStr := match[1] 81 if len(vStr) == 0 { // If the version capture group was empty, default to v1. 82 return semver.Version{Major: 1}, nil 83 } 84 return semver.MustParse(fmt.Sprintf("%s.0.0", vStr[2:])), nil 85 } 86 return semver.Version{Major: 1}, nil 87 } 88 89 // isZero is a null safe check for if a value is it's types zero value. 90 func IsZero(v interface{}) bool { 91 if v == nil { 92 return true 93 } 94 return reflect.ValueOf(v).IsZero() 95 } 96 97 func CallPlain( 98 ctx *pulumi.Context, 99 tok string, 100 args pulumi.Input, 101 output pulumi.Output, 102 self pulumi.Resource, 103 property string, 104 resultPtr reflect.Value, 105 errorPtr *error, 106 opts ...pulumi.InvokeOption, 107 ) { 108 res, err := callPlainInner(ctx, tok, args, output, self, opts...) 109 if err != nil { 110 *errorPtr = err 111 return 112 } 113 114 v := reflect.ValueOf(res) 115 116 // extract res.property field if asked to do so 117 if property != "" { 118 v = v.FieldByName("Res") 119 } 120 121 // return by setting the result pointer; this style of returns shortens the generated code without generics 122 resultPtr.Elem().Set(v) 123 } 124 125 func callPlainInner( 126 ctx *pulumi.Context, 127 tok string, 128 args pulumi.Input, 129 output pulumi.Output, 130 self pulumi.Resource, 131 opts ...pulumi.InvokeOption, 132 ) (any, error) { 133 o, err := ctx.Call(tok, args, output, self, opts...) 134 if err != nil { 135 return nil, err 136 } 137 138 outputData, err := internals.UnsafeAwaitOutput(ctx.Context(), o) 139 if err != nil { 140 return nil, err 141 } 142 143 // Ingoring deps silently. They are typically non-empty, r.f() calls include r as a dependency. 144 known := outputData.Known 145 value := outputData.Value 146 secret := outputData.Secret 147 148 problem := "" 149 if !known { 150 problem = "an unknown value" 151 } else if secret { 152 problem = "a secret value" 153 } 154 155 if problem != "" { 156 return nil, fmt.Errorf("Plain resource method %q incorrectly returned %s. "+ 157 "This is an error in the provider, please report this to the provider developer.", 158 tok, problem) 159 } 160 161 return value, nil 162 } 163 164 // PkgResourceDefaultOpts provides package level defaults to pulumi.OptionResource. 165 func PkgResourceDefaultOpts(opts []pulumi.ResourceOption) []pulumi.ResourceOption { 166 defaults := []pulumi.ResourceOption{} 167 168 version := SdkVersion 169 if !version.Equals(semver.Version{}) { 170 defaults = append(defaults, pulumi.Version(version.String())) 171 } 172 return append(defaults, opts...) 173 } 174 175 // PkgInvokeDefaultOpts provides package level defaults to pulumi.OptionInvoke. 176 func PkgInvokeDefaultOpts(opts []pulumi.InvokeOption) []pulumi.InvokeOption { 177 defaults := []pulumi.InvokeOption{} 178 179 version := SdkVersion 180 if !version.Equals(semver.Version{}) { 181 defaults = append(defaults, pulumi.Version(version.String())) 182 } 183 return append(defaults, opts...) 184 }