github.com/mavryk-network/mvgo@v1.19.9/internal/generate/data.go (about) 1 package generate 2 3 import ( 4 "bytes" 5 _ "embed" 6 "go/format" 7 "log" 8 "text/template" 9 10 "github.com/mavryk-network/mvgo/contract/ast" 11 12 "github.com/pkg/errors" 13 ) 14 15 //go:embed contract.go.tmpl 16 var goTemplate string 17 18 type Data struct { 19 Contract *ast.Contract 20 Structs []*ast.Struct 21 Address string 22 Package string 23 } 24 25 func Render(data *Data) ([]byte, error) { 26 tpl, err := template.New("contract").Funcs(funcMap).Parse(goTemplate) 27 if err != nil { 28 return nil, errors.Wrap(err, "failed to parse template") 29 } 30 buffer := new(bytes.Buffer) 31 err = tpl.Execute(buffer, data) 32 if err != nil { 33 return nil, errors.Wrap(err, "failed to execute template") 34 } 35 out, err := format.Source(buffer.Bytes()) 36 if err != nil { 37 log.Println(err) 38 out = buffer.Bytes() 39 } 40 return out, nil 41 }