Skip to content

Commit ded8773

Browse files
authored
Add more helpers for oneOf types with string-like variants. (#364)
Move constructors for string-like variants from terraform provider to helpers.go for reuse in other applications. h/t @lgfa29.
1 parent 6cab334 commit ded8773

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed

oxide/helpers.go

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,13 @@
44

55
package oxide
66

7+
// This file contains hand-written helper methods for generated types.
8+
79
import "fmt"
810

11+
// String helpers for oneOf types whose variants are all string or string-like (Name, NameOrId,
12+
// etc.).
13+
914
// String returns the string representation of the RouteDestination's value.
1015
// Returns an empty string if no variant is set.
1116
func (v RouteDestination) String() string {
@@ -93,3 +98,97 @@ func (v RouteTarget) String() string {
9398
panic(fmt.Sprintf("unhandled RouteTarget variant: %T", val))
9499
}
95100
}
101+
102+
// Constructor helpers for oneOf types whose variants are all string or string-like.
103+
104+
// NewRouteDestination creates a RouteDestination from a type constant and string value.
105+
func NewRouteDestination(t RouteDestinationType, value string) (RouteDestination, error) {
106+
switch t {
107+
case RouteDestinationTypeIp:
108+
return RouteDestination{Value: &RouteDestinationIp{Value: value}}, nil
109+
case RouteDestinationTypeIpNet:
110+
return RouteDestination{Value: &RouteDestinationIpNet{Value: IpNet(value)}}, nil
111+
case RouteDestinationTypeVpc:
112+
return RouteDestination{Value: &RouteDestinationVpc{Value: Name(value)}}, nil
113+
case RouteDestinationTypeSubnet:
114+
return RouteDestination{Value: &RouteDestinationSubnet{Value: Name(value)}}, nil
115+
default:
116+
return RouteDestination{}, fmt.Errorf("unknown RouteDestinationType: %s", t)
117+
}
118+
}
119+
120+
// NewRouteTarget creates a RouteTarget from a type constant and string value.
121+
// For RouteTargetTypeDrop, the value is ignored.
122+
func NewRouteTarget(t RouteTargetType, value string) (RouteTarget, error) {
123+
switch t {
124+
case RouteTargetTypeIp:
125+
return RouteTarget{Value: &RouteTargetIp{Value: value}}, nil
126+
case RouteTargetTypeVpc:
127+
return RouteTarget{Value: &RouteTargetVpc{Value: Name(value)}}, nil
128+
case RouteTargetTypeSubnet:
129+
return RouteTarget{Value: &RouteTargetSubnet{Value: Name(value)}}, nil
130+
case RouteTargetTypeInstance:
131+
return RouteTarget{Value: &RouteTargetInstance{Value: Name(value)}}, nil
132+
case RouteTargetTypeInternetGateway:
133+
return RouteTarget{Value: &RouteTargetInternetGateway{Value: Name(value)}}, nil
134+
case RouteTargetTypeDrop:
135+
return RouteTarget{Value: &RouteTargetDrop{}}, nil
136+
default:
137+
return RouteTarget{}, fmt.Errorf("unknown RouteTargetType: %s", t)
138+
}
139+
}
140+
141+
// NewVpcFirewallRuleHostFilter creates a VpcFirewallRuleHostFilter from a type
142+
// constant and string value.
143+
func NewVpcFirewallRuleHostFilter(
144+
t VpcFirewallRuleHostFilterType,
145+
value string,
146+
) (VpcFirewallRuleHostFilter, error) {
147+
switch t {
148+
case VpcFirewallRuleHostFilterTypeVpc:
149+
return VpcFirewallRuleHostFilter{
150+
Value: &VpcFirewallRuleHostFilterVpc{Value: Name(value)},
151+
}, nil
152+
case VpcFirewallRuleHostFilterTypeSubnet:
153+
return VpcFirewallRuleHostFilter{
154+
Value: &VpcFirewallRuleHostFilterSubnet{Value: Name(value)},
155+
}, nil
156+
case VpcFirewallRuleHostFilterTypeInstance:
157+
return VpcFirewallRuleHostFilter{
158+
Value: &VpcFirewallRuleHostFilterInstance{Value: Name(value)},
159+
}, nil
160+
case VpcFirewallRuleHostFilterTypeIp:
161+
return VpcFirewallRuleHostFilter{Value: &VpcFirewallRuleHostFilterIp{Value: value}}, nil
162+
case VpcFirewallRuleHostFilterTypeIpNet:
163+
return VpcFirewallRuleHostFilter{
164+
Value: &VpcFirewallRuleHostFilterIpNet{Value: IpNet(value)},
165+
}, nil
166+
default:
167+
return VpcFirewallRuleHostFilter{}, fmt.Errorf(
168+
"unknown VpcFirewallRuleHostFilterType: %s",
169+
t,
170+
)
171+
}
172+
}
173+
174+
// NewVpcFirewallRuleTarget creates a VpcFirewallRuleTarget from a type constant
175+
// and string value.
176+
func NewVpcFirewallRuleTarget(
177+
t VpcFirewallRuleTargetType,
178+
value string,
179+
) (VpcFirewallRuleTarget, error) {
180+
switch t {
181+
case VpcFirewallRuleTargetTypeVpc:
182+
return VpcFirewallRuleTarget{Value: &VpcFirewallRuleTargetVpc{Value: Name(value)}}, nil
183+
case VpcFirewallRuleTargetTypeSubnet:
184+
return VpcFirewallRuleTarget{Value: &VpcFirewallRuleTargetSubnet{Value: Name(value)}}, nil
185+
case VpcFirewallRuleTargetTypeInstance:
186+
return VpcFirewallRuleTarget{Value: &VpcFirewallRuleTargetInstance{Value: Name(value)}}, nil
187+
case VpcFirewallRuleTargetTypeIp:
188+
return VpcFirewallRuleTarget{Value: &VpcFirewallRuleTargetIp{Value: value}}, nil
189+
case VpcFirewallRuleTargetTypeIpNet:
190+
return VpcFirewallRuleTarget{Value: &VpcFirewallRuleTargetIpNet{Value: IpNet(value)}}, nil
191+
default:
192+
return VpcFirewallRuleTarget{}, fmt.Errorf("unknown VpcFirewallRuleTargetType: %s", t)
193+
}
194+
}

0 commit comments

Comments
 (0)