forked from clipperhouse/slice
/
model.go
64 lines (55 loc) · 1.25 KB
/
model.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
package golist
import (
"github.com/rickb777/typewriter"
"io"
)
// a convenience for passing values into templates; in MVC it'd be called a view model
type model struct {
Type typewriter.Type
TName string
PName string
Ptr string
Deref string
Addr string
// these templates only ever happen to use one type parameter
TypeParameter typewriter.Type
typewriter.TagValue
Has flags
}
func newModel(typ typewriter.Type, flags flags) model {
p := ""
d := "*"
a := ""
if typ.Pointer {
p = "*"
d = ""
a = "&"
}
return model{
Type: typ,
TName: typ.Name,
PName: typ.String(),
Ptr: p,
Deref: d,
Addr: a,
Has: flags,
}
}
func writeTaggedTemplate(w io.Writer, twTmpl *typewriter.Template, typ typewriter.Type, flags flags, tv typewriter.TagValue) error {
var tp typewriter.Type
if len(tv.TypeParameters) > 0 {
tp = tv.TypeParameters[0]
}
m := newModel(typ, flags)
m.TypeParameter = tp
m.TagValue = tv
// fmt.Printf("writeTaggedTemplate\n %+v\n", m)
return writeTextTemplate(w, twTmpl, m)
}
func writeTextTemplate(w io.Writer, twTmpl *typewriter.Template, m model) error {
tmpl, err := twTmpl.Parse()
if err != nil {
return err
}
return tmpl.Execute(w, m)
}