github.com/profzone/eden-framework@v1.0.10/internal/generator/files/go_file.go (about)

     1  package files
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"github.com/profzone/eden-framework/internal/generator/importer"
     7  	"github.com/sirupsen/logrus"
     8  	"html/template"
     9  )
    10  
    11  type GoFile struct {
    12  	PackageName string
    13  	*importer.PackageImporter
    14  
    15  	buf *bytes.Buffer
    16  }
    17  
    18  func NewGoFile(pkgName string) *GoFile {
    19  	return &GoFile{
    20  		PackageName:     pkgName,
    21  		PackageImporter: importer.NewPackageImporter(""),
    22  		buf:             bytes.NewBuffer([]byte{}),
    23  	}
    24  }
    25  
    26  func (f *GoFile) WithBlock(tpl string) *GoFile {
    27  	f.write(tpl)
    28  	return f
    29  }
    30  
    31  func (f *GoFile) write(tpl string) {
    32  	t, err := template.New(f.PackageName).Parse(tpl)
    33  	if err != nil {
    34  		logrus.Panicf("template parse failed: %v", err)
    35  	}
    36  
    37  	err = t.Execute(f.buf, f)
    38  	if err != nil {
    39  		logrus.Panicf("template execute failed: %v", err)
    40  	}
    41  }
    42  
    43  func (f *GoFile) String() string {
    44  	return fmt.Sprintf(`package %s
    45  
    46  %s
    47  
    48  %s
    49  `, f.PackageName, f.PackageImporter.String(), f.buf.String())
    50  }