8 "github.com/clipperhouse/typewriter"
12 err := typewriter.Register(NewWrapperWriter())
18 type WrapperWriter struct{}
20 func NewWrapperWriter() *WrapperWriter {
21 return &WrapperWriter{}
24 func (sw *WrapperWriter) Name() string {
28 func (sw *WrapperWriter) Imports(t typewriter.Type) []typewriter.ImportSpec {
29 return []typewriter.ImportSpec{{Path: "github.com/tendermint/go-wire/data"}}
32 func (sw *WrapperWriter) Write(w io.Writer, t typewriter.Type) error {
33 tag, found := t.FindTag(sw)
40 license := `// Auto-generated adapters for happily unmarshaling interfaces
42 // Copyright (c) 2017 Ethan Frey (ethan.frey@tendermint.com)
45 if _, err := w.Write([]byte(license)); err != nil {
46 fmt.Println("write error")
51 name := t.Name + "Wrapper"
52 if len(tag.Values) > 0 {
53 name = tag.Values[0].Name
55 m := model{Type: t, Wrapper: name, Inner: t.Name}
57 // now, first main Wrapper
58 v := typewriter.TagValue{Name: "Wrapper"}
59 htmpl, err := templates.ByTagValue(t, v)
63 if err := htmpl.Execute(w, m); err != nil {
67 // Now, add any implementations...
69 rtmpl, err := templates.ByTagValue(t, v)
74 for ti, t := range tag.Values {
76 for i, p := range t.TypeParameters {
80 if len(tag.Values) > ni {
81 m.ImplType = tag.Values[ni].Name
83 m.ImplType = strings.ToLower(p.Name)
85 if err := rtmpl.Execute(w, m); err != nil {
99 Impl typewriter.Type // fill in when adding for implementations