Use autogenerated bindings for Lemmy 0.16.7
This commit is contained in:
61
cmd/gen/generator/routes.go
Normal file
61
cmd/gen/generator/routes.go
Normal file
@@ -0,0 +1,61 @@
|
||||
package generator
|
||||
|
||||
import (
|
||||
"io"
|
||||
"strings"
|
||||
|
||||
"github.com/dave/jennifer/jen"
|
||||
"go.arsenm.dev/go-lemmy/cmd/gen/parser"
|
||||
)
|
||||
|
||||
type RoutesGenerator struct {
|
||||
w io.Writer
|
||||
PkgName string
|
||||
}
|
||||
|
||||
func NewRoutes(w io.Writer, pkgName string) *RoutesGenerator {
|
||||
return &RoutesGenerator{w, pkgName}
|
||||
}
|
||||
|
||||
func (r *RoutesGenerator) Generate(routes []parser.Route, impls map[string]string) error {
|
||||
f := jen.NewFile(r.PkgName)
|
||||
for _, r := range routes {
|
||||
resStruct := impls[r.Struct]
|
||||
|
||||
f.Func().Params(
|
||||
jen.Id("c").Id("*Client"),
|
||||
).Id(strings.TrimPrefix(r.Struct, "Get")).Params(
|
||||
jen.Id("ctx").Qual("context", "Context"),
|
||||
jen.Id("data").Qual("go.arsenm.dev/go-lemmy/types", r.Struct),
|
||||
).Params(
|
||||
jen.Op("*").Qual("go.arsenm.dev/go-lemmy/types", resStruct),
|
||||
jen.Error(),
|
||||
).BlockFunc(func(g *jen.Group) {
|
||||
g.Id("resData").Op(":=").Op("&").Qual("go.arsenm.dev/go-lemmy/types", resStruct).Block()
|
||||
|
||||
var funcName string
|
||||
switch r.Method {
|
||||
case "GET":
|
||||
funcName = "getReq"
|
||||
default:
|
||||
funcName = "req"
|
||||
}
|
||||
|
||||
g.List(jen.Id("res"), jen.Err()).Op(":=").Id("c").Dot(funcName).Params(
|
||||
jen.Id("ctx"), jen.Lit(r.Method), jen.Lit(r.Path), jen.Id("data"), jen.Op("&").Id("resData"),
|
||||
)
|
||||
g.If(jen.Err().Op("!=").Nil()).Block(
|
||||
jen.Return(jen.Nil(), jen.Err()),
|
||||
)
|
||||
|
||||
g.Err().Op("=").Id("resError").Params(jen.Id("res"), jen.Id("resData").Dot("LemmyResponse"))
|
||||
g.If(jen.Err().Op("!=").Nil()).Block(
|
||||
jen.Return(jen.Nil(), jen.Err()),
|
||||
)
|
||||
|
||||
g.Return(jen.Id("resData"), jen.Nil())
|
||||
})
|
||||
}
|
||||
|
||||
return f.Render(r.w)
|
||||
}
|
||||
57
cmd/gen/generator/struct.go
Normal file
57
cmd/gen/generator/struct.go
Normal file
@@ -0,0 +1,57 @@
|
||||
package generator
|
||||
|
||||
import (
|
||||
"io"
|
||||
"strings"
|
||||
|
||||
"go.arsenm.dev/go-lemmy/cmd/gen/parser"
|
||||
"github.com/dave/jennifer/jen"
|
||||
)
|
||||
|
||||
type StructGenerator struct {
|
||||
w io.Writer
|
||||
PkgName string
|
||||
}
|
||||
|
||||
func NewStruct(w io.Writer, pkgName string) *StructGenerator {
|
||||
return &StructGenerator{w, pkgName}
|
||||
}
|
||||
|
||||
func (s *StructGenerator) Generate(items []parser.Item) error {
|
||||
f := jen.NewFile(s.PkgName)
|
||||
for _, item := range items {
|
||||
if item.Struct != nil {
|
||||
st := item.Struct
|
||||
f.Type().Id(st.Name).StructFunc(func(g *jen.Group) {
|
||||
for _, field := range st.Fields {
|
||||
var t jen.Code
|
||||
if field.Type == "time.Time" {
|
||||
t = jen.Qual("time", "Time")
|
||||
} else {
|
||||
t = jen.Id(field.Type)
|
||||
}
|
||||
|
||||
g.Id(field.Name).Add(t).Tag(map[string]string{
|
||||
"json": field.OrigName + ",omitempty",
|
||||
"url": field.OrigName + ",omitempty",
|
||||
})
|
||||
}
|
||||
|
||||
if strings.HasSuffix(st.Name, "Response") {
|
||||
g.Id("LemmyResponse")
|
||||
}
|
||||
})
|
||||
} else if item.Enum != nil {
|
||||
e := item.Enum
|
||||
f.Type().Id(e.Name).String()
|
||||
|
||||
f.Const().DefsFunc(func(g *jen.Group) {
|
||||
for _, member := range e.Members {
|
||||
g.Id(e.Name + string(member)).Op("=").Lit(string(member))
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return f.Render(s.w)
|
||||
}
|
||||
Reference in New Issue
Block a user