forked from kdar/health
/
gen.go
87 lines (69 loc) · 1.87 KB
/
gen.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
79
80
81
82
83
84
85
86
87
package main
import (
"fmt"
"log"
"os"
"strings"
"golang.org/x/net/html/charset"
"bitbucket.org/pkg/inflect"
"github.com/jteeuwen/go-pkg-xmlx"
)
func main() {
fp, err := os.Open("vendor/2.3/datatypes.xsd")
if err != nil {
log.Fatal(err)
}
defer fp.Close()
doc := xmlx.New()
err = doc.LoadStream(fp, charset.NewReaderLabel)
if err != nil {
log.Fatal(err)
}
schema := doc.SelectNode("*", "schema")
// build map of types
typs := make(map[string]*Node)
nodes1 := schema.SelectNodes("*", "complexType")
nodes2 := schema.SelectNodes("*", "simpleType")
for _, node := range append(nodes1, nodes2...) {
typs[node.As("*", "name")] = NewNode(node)
}
// build map of elements
elements := make(map[string]*Node)
nodes1 = schema.SelectNodes("*", "element")
for _, node := range nodes1 {
elements[node.As("*", "name")] = NewNode(node)
}
rs := inflect.NewRuleset()
for k, v := range typs {
//FIXME: REMOVE
//if k != "XPN" {
// continue
//}
if !strings.HasSuffix(k, "CONTENT") && v.Name.Local == "complexType" {
typeName := NormalizeTypeName(rs, k)
fileName := NormalizeFileName(rs, k)
fmt.Println(fileName + ".go:")
fmt.Printf("type %s struct {\n", typeName)
sequence := v.SelectNode("*", "sequence")
if sequence == nil {
continue
}
els := sequence.SelectNodes("*", "element")
if els == nil {
continue
}
//Namings.normalize_name(Meta.type_desc(tp) || Meta.ref(el_ref) || Meta.name(el_ref), Meta.ref(el_ref) || Meta.name(el_ref)),
//Namings.mk_class_name(Meta.base_type(tp) || Meta.name(tp).split('.').first),
for _, el := range els {
refStr := el.As("*", "ref")
typStr := elements[refStr].As("*", "type")
typ := typs[typStr]
doc := typ.FindNode("annotation", "documentation")
if doc != nil {
fmt.Printf(" // %s\n", doc.S("*", "documentation"))
}
}
fmt.Printf("}\n\n")
}
}
}