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  }