enki
is a package for easy go files generation
package main
import (
"os"
"github.com/ricdeau/enki"
)
const (
Int = "int"
Str = "string"
Float32 = "float32"
Float64 = "float64"
)
func main() {
f := enki.NewFile()
f.Package("enki")
f.GeneratedBy("enki")
f.Import(".", "fmt")
f.Import("", "sync")
f.Consts(enki.Field(`DEF = "default"`))
f.Vars(enki.Field(`wg sync.WaitGroup`))
f.Line("// Number type redefined")
f.Add(enki.T("Number").Is(Int))
f.NewLine()
f.Add(enki.T("NumStruct").Struct(
enki.Field("a, b " + Int),
))
f.NewLine()
f.Add(enki.T("Num").Interface(
enki.Def("AsNumber").Returns(Str),
enki.Def("Sum").Params(Int).Returns(Int),
))
f.NewLine()
f.Add(enki.M("AsNumber").Receiver("n Number").Body(
enki.Stmt().Line("wg.Add(1)"),
enki.Stmt().Line("defer wg.Done()"),
enki.Stmt().Line("return Sprint(n)"),
).Returns(Str))
f.NewLine()
f.Add(enki.M("Sum").Receiver("n Number").Params("x int").Body(
enki.Stmt().Line("return int(n) + x"),
).Returns(Int))
f.NewLine()
f.Add(enki.M("Sum").Receiver("ns NumStruct").Body(
enki.Stmt().Line("return ns.a + ns.b"),
).Returns(Int))
f.NewLine()
f.Add(enki.F("sum").Params("a, b " + Float32).Body(
enki.Stmt().Line("return @1(a + b)", Float64),
).Returns("s " + Float64))
_ = f.GoFmt(true).Write(os.Stdout)
}
Output:
// Code generated by enki. DO NOT EDIT.
package enki
import (
. "fmt"
"sync"
)
const (
DEF = "default"
)
var (
wg sync.WaitGroup
)
// Number type redefined
type Number int
type NumStruct struct {
a, b int
}
type Num interface {
AsNumber() string
Sum(int) int
}
func (n Number) AsNumber() string {
wg.Add(1)
defer wg.Done()
return Sprint(n)
}
func (n Number) Sum(x int) int {
return int(n) + x
}
func (ns NumStruct) Sum() int {
return ns.a + ns.b
}
func sum(a, b float32) (s float64) {
return float64(a + b)
}