@@ -118,7 +118,7 @@ func generateFromTerraformToPangoParameter(pkgName string, terraformPrefix strin
118
118
return specs
119
119
}
120
120
121
- const copyNestedFromTerraformToPangoStr = `
121
+ const copyToPangoTmpl = `
122
122
{{- define "terraformNestedElementsAssign" }}
123
123
{{- with .Parameter }}
124
124
@@ -211,7 +211,138 @@ func (o *{{ .TerraformType }}{{ .ModelOrObject }}) CopyToPango(ctx context.Conte
211
211
{{- end }}
212
212
`
213
213
214
- func CopyNestedFromTerraformToPango (pkgName string , terraformTypePrefix string , property * properties.Normalization ) (string , error ) {
214
+ const copyFromPangoTmpl = `
215
+ {{- define "renderFromPangoToTfParameter" }}
216
+ {{- if eq .Type "" }}
217
+ // TODO: Missing implementation
218
+ {{- else }}
219
+ // {{ .Name.CamelCase }}: types.{{ .Type | PascalCase }}Value(*elt.{{ .Name.CamelCase }}),
220
+ {{- end }}
221
+ {{- end }}
222
+
223
+ {{- define "terraformListElementsAsParam" }}
224
+ {{- with .Parameter }}
225
+ {{- $pangoType := printf "%s%s" $.Spec.PangoType .Name.CamelCase }}
226
+ {{- $terraformType := printf "%s%s%s" $.Spec.TerraformType .Name.CamelCase $.Spec.ModelOrObject }}
227
+ {{- $pangoEntries := printf "%s_pango_entries" .Name.LowerCamelCase }}
228
+ {{- $tfEntries := printf "%s_tf_entries" .Name.LowerCamelCase }}
229
+ {{- if eq .Items.Type "entry" }}
230
+ var {{ $tfEntries }} []{{ $terraformType }}
231
+ var {{ $pangoEntries }} []{{ $pangoType }}
232
+ {
233
+ for _, elt := range {{ $pangoEntries }} {
234
+ _ = elt // FIXME: remove after we've implemented this code
235
+ entry := &{{ $terraformType }} {
236
+ {{- range .Spec.Params }}
237
+ {{- template "renderFromPangoToTfParameter" . }}
238
+ {{- end }}
239
+ {{- range .Spec.OneOf }}
240
+ {{- template "renderFromPangoToTfParameter" . }}
241
+ {{- end }}
242
+ }
243
+ {{ $tfEntries }} = append({{ $tfEntries }}, *entry)
244
+ }
245
+ }
246
+ {{- else }}
247
+ var {{ $pangoEntries }} []{{ .Items.Type }}
248
+ {
249
+ d := o.{{ .Name.CamelCase }}.ElementsAs(ctx, &{{ $pangoEntries }}, false)
250
+ diags.Append(d...)
251
+ }
252
+ {{- end }}
253
+ {{- end }}
254
+ {{- end }}
255
+
256
+ {{- define "terraformListElementsAs" }}
257
+ {{- range .Params }}
258
+ {{- if eq .Type "list" }}
259
+ {{- template "terraformListElementsAsParam" Map "Spec" $ "Parameter" . }}
260
+ {{- end }}
261
+ {{- end }}
262
+
263
+ {{- range .OneOf }}
264
+ {{- if eq .Type "list" }}
265
+ {{- template "terraformListElementsAsParam" Map "Spec" $ "Parameter" . }}
266
+ {{- end }}
267
+ {{- end }}
268
+ {{- end }}
269
+
270
+ {{- define "terraformCreateEntryAssignmentForParam" }}
271
+ {{- with .Parameter }}
272
+
273
+ {{- $result := .Name.LowerCamelCase }}
274
+ {{- $diag := .Name.LowerCamelCase | printf "%s_diags" }}
275
+ var {{ $result }}_object *{{ $.Spec.TerraformType }}{{ .Name.CamelCase }}Object
276
+ var {{ $diag }} diag.Diagnostics
277
+ {{ $result }}_object, {{ $diag }} = o.{{ .Name.CamelCase }}.CopyFromPango(ctx, *obj.{{ .Name.CamelCase }})
278
+ diags.Append({{ $diag }}...)
279
+ {{- end }}
280
+ {{- end }}
281
+
282
+ {{- define "terraformCreateEntryAssignment" }}
283
+ {{- range .Params }}
284
+ {{- if eq .Type "" }}
285
+ {{- template "terraformCreateEntryAssignmentForParam" Map "Spec" $ "Parameter" . }}
286
+ {{- end }}
287
+ {{- end }}
288
+
289
+ {{- range .OneOf }}
290
+ {{- if eq .Type "" }}
291
+ {{- template "terraformCreateEntryAssignmentForParam" Map "Spec" $ "Parameter" . }}
292
+ {{- end }}
293
+ {{- end }}
294
+ {{- end }}
295
+
296
+ {{- define "assignFromPangoToTerraform" }}
297
+ {{- with .Parameter }}
298
+ {{- if eq .Type "" }}
299
+ {{ .Name.CamelCase }}: *{{ .Name.LowerCamelCase }}_object,
300
+ {{- else if eq .Type "list" }}
301
+ // {{ .Name.CamelCase }}: types.ListValueFrom{{ .Name.LowerCamelCase }}_tf_entries,
302
+ {{- else }}
303
+ {{ .Name.CamelCase }}: types.{{ .Type | PascalCase }}Value(*obj.{{ .Name.CamelCase }}),
304
+ {{- end }}
305
+ {{- end }}
306
+ {{- end }}
307
+
308
+ {{- range .Specs }}
309
+ {{- $spec := . }}
310
+ {{ $terraformType := printf "%s%s" .TerraformType .ModelOrObject }}
311
+ func (o *{{ $terraformType }}) CopyFromPango(ctx context.Context, obj {{ .PangoReturnType }}) (*{{ $terraformType }}, diag.Diagnostics) {
312
+ var diags diag.Diagnostics
313
+ {{- template "terraformListElementsAs" $spec }}
314
+ {{- template "terraformCreateEntryAssignment" $spec }}
315
+ return &{{ $terraformType }}{
316
+ {{- range .Params }}
317
+ {{- template "assignFromPangoToTerraform" Map "Spec" $spec "Parameter" . }}
318
+ {{- end }}
319
+ {{- range .OneOf }}
320
+ {{- template "assignFromPangoToTerraform" Map "Spec" $spec "Parameter" . }}
321
+ {{- end }}
322
+ }, diags
323
+ }
324
+ {{- end }}
325
+ `
326
+
327
+ func pascalCase (value string ) string {
328
+ var parts []string
329
+ if strings .Contains (value , "-" ) {
330
+ parts = strings .Split (value , "-" )
331
+ } else if strings .Contains (value , "_" ) {
332
+ parts = strings .Split (value , "_" )
333
+ } else {
334
+ parts = []string {value }
335
+ }
336
+
337
+ var result []string
338
+ for _ , elt := range parts {
339
+ result = append (result , strings .Title (elt ))
340
+ }
341
+
342
+ return strings .Join (result , "" )
343
+ }
344
+
345
+ func RenderCopyToPangoFunctions (pkgName string , terraformTypePrefix string , property * properties.Normalization ) (string , error ) {
215
346
specs := generateFromTerraformToPangoParameter (pkgName , terraformTypePrefix , "" , property , "" )
216
347
217
348
type context struct {
@@ -221,7 +352,27 @@ func CopyNestedFromTerraformToPango(pkgName string, terraformTypePrefix string,
221
352
data := context {
222
353
Specs : specs ,
223
354
}
224
- return processTemplate (copyNestedFromTerraformToPangoStr , "create-nested-copy-from-tf-to-pango" , data , commonFuncMap )
355
+ funcMap := mergeFuncMaps (commonFuncMap , template.FuncMap {
356
+ "PascalCase" : pascalCase ,
357
+ })
358
+ return processTemplate (copyToPangoTmpl , "copy-to-pango" , data , funcMap )
359
+ }
360
+
361
+ func RenderCopyFromPangoFunctions (pkgName string , terraformTypePrefix string , property * properties.Normalization ) (string , error ) {
362
+ specs := generateFromTerraformToPangoParameter (pkgName , terraformTypePrefix , "" , property , "" )
363
+
364
+ type context struct {
365
+ Specs []spec
366
+ }
367
+
368
+ data := context {
369
+ Specs : specs ,
370
+ }
371
+
372
+ funcMap := mergeFuncMaps (commonFuncMap , template.FuncMap {
373
+ "PascalCase" : pascalCase ,
374
+ })
375
+ return processTemplate (copyFromPangoTmpl , "copy-from-pango" , data , funcMap )
225
376
}
226
377
227
378
func ResourceCreateFunction (structName string , serviceName string , paramSpec * properties.Normalization , terraformProvider * properties.TerraformProviderFile , resourceSDKName string ) (string , error ) {
0 commit comments