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 }