/
converter_firestore.go
78 lines (70 loc) · 1.92 KB
/
converter_firestore.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 gen
import (
"google.golang.org/protobuf/compiler/protogen"
)
func (m *Message) genConvertToFirestoreFields() {
for _, field := range m.fields {
field.genConvertFieldToFirestore()
}
}
func (f *Field) genConvertFieldToFirestore() {
switch {
case f.fieldType.IsEnum:
f.genEnumToFirestore()
case f.fieldType.isTimestamp():
f.genConvertTimestampToFirestore()
case f.fieldType.IsPointer:
f.genConvertPointerToFirestore()
default:
f.genConvertDefaultToFirebase()
}
}
func (f *Field) genConvertDefaultToFirebase() {
f.P("m.", f.Name(), " = x.", f.Name())
}
func (f *Field) genEnumToFirestore() {
f.P("m.", f.Name(), " = ", "int32(x.", f.Name(), ")")
}
func (f *Field) genConvertTimestampToFirestore() {
tt := f.msg.file.out.QualifiedGoIdent(protogen.GoIdent{
GoName: "Time",
GoImportPath: "time",
})
if f.fieldType.IsList {
f.P("{")
f.P("l := len(x.", f.Name(), ")")
f.P("m.", f.Name(), " = make([]", tt, ", l)")
f.P("for i:=0; i < l; i++ {")
f.P("if x.", f.Name(), "[i] != nil {")
f.P("m.", f.Name(), "[i] = x.", f.Name(), "[i].AsTime()")
f.P("}") // if
f.P("}") // for
f.P("}")
} else {
f.P("if t := x.", f.Name(), "; t != nil {")
f.P("m.", f.Name(), " = t.AsTime()")
f.P("}")
}
}
func (f *Field) genConvertPointerToFirestore() {
if f.fieldType.IsCustom && !f.fieldType.IsExternal {
f.P("if x.", f.Name(), " != nil {")
f.P("if c, err := x.", f.Name(), ".ToFirestore(); err != nil {")
f.P("return nil, err")
f.P("} else {")
f.P("m.", f.Name(), " = c")
f.P("}")
f.P("}")
} else {
f.P("m.", f.Name(), " = *x.", f.Name())
}
}
func (m *Message) genToFirestoreMethod() {
m.P(Comment(" ToFirestore returns the Firestore Custom Object for %s.", m.proto.GoIdent.GoName),
"func (x *", m.proto.GoIdent.GoName, ") ToFirestore() (*", m.CustomObjectName(), ", error) {")
m.P("m := new(", m.CustomObjectName(), ")")
m.genConvertToFirestoreFields()
m.P("return m, nil")
m.P("}")
m.P()
}