-
Notifications
You must be signed in to change notification settings - Fork 2
/
cfn_to_cue.go
78 lines (69 loc) · 1.49 KB
/
cfn_to_cue.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package main
import "cuelang.org/go/cue/ast"
const propertyPrefix = "prop"
func mapFromCFNTypeToCue(cfnType string) (lit ast.Expr) {
switch cfnType {
case "String":
lit = &ast.BasicLit{Value: "string"}
case "Integer", "Long":
lit = &ast.BasicLit{Value: "int"}
case "Double":
lit = &ast.BasicLit{Value: "number"}
case "Boolean":
lit = &ast.BasicLit{Value: "bool"}
case "Json":
lit = &ast.StructLit{
Elts: []ast.Decl{
&ast.Field{
Label: ast.NewList(&ast.BasicLit{Value: "string"}),
Value: &ast.BasicLit{Value: "_"},
},
},
}
case "Map":
lit = &ast.StructLit{}
case "Timestamp":
lit = &ast.BasicLit{Value: "time.Time"}
default:
// TODO clean this up... feels super ugly.
lit = &ast.BasicLit{Value: propertyPrefix + cfnType}
}
return lit
}
func convertTypeToCUE(name string) string {
switch name {
case "String":
return "string"
case "Long":
return "int"
case "Integer":
return "int"
case "Double":
return "number"
case "Boolean":
return "bool"
case "Timestamp":
return "time.Time"
case "Json":
return "struct"
case "Map":
return "struct"
default:
return name
}
}
func (p Property) getPrimitiveTypeString() string {
if p.IsPrimitive() {
return p.PrimitiveType
}
if p.IsMap() && p.IsMapOfPrimitives() {
return p.PrimitiveItemType
}
if p.IsList() && p.IsListOfPrimitives() {
return p.PrimitiveItemType
}
return ""
}
func (p Property) getCUEPrimitiveType() ast.Expr {
return mapFromCFNTypeToCue(p.getPrimitiveTypeString())
}