Use autogenerated bindings for Lemmy 0.16.7

This commit is contained in:
2023-01-05 12:51:45 -08:00
parent c19f44c304
commit a355158d88
68 changed files with 3743 additions and 3083 deletions

View 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)
}

View 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)
}