generated from TBD54566975/tbd-project-template
-
Notifications
You must be signed in to change notification settings - Fork 6
/
normalise.go
72 lines (70 loc) 路 1.41 KB
/
normalise.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
package schema
// Normalise a Node.
func Normalise[T Node](n T) T {
var zero Position
var ni Node = n
switch c := ni.(type) {
case *Schema:
c.Pos = zero
c.Modules = normaliseSlice(c.Modules)
case *Module:
c.Pos = zero
c.Decls = normaliseSlice(c.Decls)
case *Array:
c.Pos = zero
c.Element = Normalise(c.Element)
case *Bool:
c.Bool = false
c.Pos = zero
case *Data:
c.Pos = zero
c.Fields = normaliseSlice(c.Fields)
c.Metadata = normaliseSlice(c.Metadata)
case *DataRef:
c.Pos = zero
case *Field:
c.Pos = zero
c.Type = Normalise(c.Type)
case *Float:
c.Float = false
c.Pos = zero
case *Int:
c.Int = false
c.Pos = zero
case *Time:
c.Time = false
c.Pos = zero
case *Map:
c.Pos = zero
c.Key = Normalise(c.Key)
c.Value = Normalise(c.Value)
case *String:
c.Str = false
c.Pos = zero
case *Verb:
c.Pos = zero
c.Request = Normalise(c.Request)
c.Response = Normalise(c.Response)
c.Metadata = normaliseSlice(c.Metadata)
case *VerbRef:
c.Pos = zero
case *MetadataCalls:
c.Pos = zero
c.Calls = normaliseSlice(c.Calls)
case *MetadataIngress:
c.Pos = zero
case Decl, Metadata, Type: // Can never occur in reality, but here to satisfy the sum-type check.
panic("??")
}
return ni.(T) //nolint:forcetypeassert
}
func normaliseSlice[T Node](in []T) []T {
if in == nil {
return nil
}
var out []T
for _, n := range in {
out = append(out, Normalise(n))
}
return out
}