35 Commits

Author SHA1 Message Date
23163a1806 Update for 0.17.0 2023-01-30 19:38:57 -08:00
014be78baa Reconnect on any read error 2023-01-24 13:19:22 -08:00
c0aced05f0 Add WebSocket reconnects 2023-01-09 12:54:06 -08:00
f7d3dab036 Move examples to examples directory 2023-01-08 00:47:32 -08:00
d4c5776790 Replace panics with error logs 2023-01-07 15:25:18 -08:00
6465ee25bc Add generation instructions to README 2023-01-07 15:15:49 -08:00
9788468c0a Add comments containing source file to generated files 2023-01-07 15:05:40 -08:00
6f5a84c24b Add special case for 'Crud', and transform enum and struct type names 2023-01-07 14:54:04 -08:00
2e4f4281de Merge branch 'master' of ssh://192.168.100.62:2222/Arsen6331/go-lemmy 2023-01-07 14:48:15 -08:00
b32e07b887 Regenerate code 2023-01-07 14:45:01 -08:00
862bcd5164 Add special cases for 'jwt' and 'crud' 2023-01-07 14:42:57 -08:00
8e0208dec2 Add header comment to generated files 2023-01-07 14:40:18 -08:00
e5092d3898 Update 'go.mod' 2023-01-06 02:58:39 +00:00
754cfa602c Remove debug code 2023-01-05 13:46:07 -08:00
0942490238 Add new LemmyTime type and remove omitempty from json tag 2023-01-05 13:42:24 -08:00
4ecce09b73 Add Operation interface 2023-01-05 13:17:10 -08:00
cf871efc23 Add IsOneOf to websocket message 2023-01-05 13:13:10 -08:00
cdd67e35a3 Use correct type for enum generation 2023-01-05 13:02:11 -08:00
7459b363f6 Use autogenerated bindings for Lemmy 0.16.7 2023-01-05 12:51:45 -08:00
e097e6c8b5 Add doc comments 2022-12-13 10:49:58 -08:00
92b96981e2 Disable recws as it was causing problems 2022-12-13 01:09:43 -08:00
b38c6b0a54 Add support for connection handlers 2022-12-12 18:36:56 -08:00
ce8f58ed2d Update go.mod 2022-12-12 18:23:20 -08:00
a4a015a4cc Add login support for WebSocket API 2022-12-12 18:12:22 -08:00
a90e43691d Add WebSocket types 2022-12-12 18:11:57 -08:00
54c27ff977 Add support for websocket api 2022-12-12 17:35:41 -08:00
6074dcd419 Switch user operations to string type 2022-12-12 16:08:41 -08:00
7fc04591ba Check response status code more strictly 2022-12-10 15:40:52 -08:00
519c58f847 Remove omitempty from json struct tags 2022-12-10 15:33:08 -08:00
a9f1b2d3bd Remove unused dependency from go.mod 2022-12-10 15:19:25 -08:00
ba705b25f7 Fix setAuth() when field is of type Optional[string] 2022-12-10 15:17:18 -08:00
6ea2a3bf54 Fix Subscribed fields 2022-12-10 14:56:20 -08:00
7c15588651 Add nil check to setAuth() 2022-12-10 12:42:27 -08:00
9beccacda1 Remove List prefixes to match naming of other functions 2022-12-10 12:15:14 -08:00
eaebd96419 Rename Q field to Query 2022-12-10 12:10:34 -08:00
83 changed files with 4975 additions and 3081 deletions

3
.gitignore vendored
View File

@@ -1 +1,2 @@
/test
/test
/gen

View File

@@ -2,30 +2,37 @@
[![Go Reference](https://pkg.go.dev/badge/go.arsenm.dev/go-lemmy.svg)](https://pkg.go.dev/go.arsenm.dev/go-lemmy)
Go bindings to the [Lemmy](https://join-lemmy.org) API
Go bindings to the [Lemmy](https://join-lemmy.org) API, automatically generated directly from Lemmy's source code using the generator in [cmd/gen](cmd/gen).
Example:
Examples:
```go
ctx := context.Background()
- HTTP: [examples/http](examples/http)
- WebSocket: [examples/websocket](examples/websocket)
c, err := lemmy.New("https://lemmy.ml")
if err != nil {
panic(err)
}
### How to generate
err = c.Login(ctx, types.Login{
UsernameOrEmail: "email@example.com",
Password: `TestPwd`,
})
if err != nil {
panic(err)
}
First, build the generator:
_, err = c.SaveUserSettings(ctx, types.SaveUserSettings{
BotAccount: types.NewOptional(true),
})
if err != nil {
panic(err)
}
```
```bash
go build ./cmd/gen
```
Clone Lemmy's source code at whatever version you need:
```bash
git clone https://github.com/LemmyNet/lemmy -b 0.16.7
```
Remove all the existing generated code:
```bash
rm **/*.gen.go
```
Execute the generator:
```bash
./gen -out-dir .
```
And that's it! Your generated code should be ready for use.

128
admin.go
View File

@@ -1,128 +0,0 @@
package lemmy
import (
"context"
"net/http"
"go.arsenm.dev/go-lemmy/types"
)
func (c *Client) AddAdmin(ctx context.Context, d types.AddAdmin) (*types.AddAdminResponse, error) {
ar := &types.AddAdminResponse{}
res, err := c.req(ctx, http.MethodPost, "/admin/add", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) ApproveRegistrationApplication(ctx context.Context, d types.ApproveRegistrationApplication) (*types.RegistrationApplicationResponse, error) {
ar := &types.RegistrationApplicationResponse{}
res, err := c.req(ctx, http.MethodPut, "/admin/registration_application/approve", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) UnreadRegistrationApplicationCount(ctx context.Context, d types.GetUnreadRegistrationApplicationCount) (*types.GetUnreadRegistrationApplicationCountResponse, error) {
ar := &types.GetUnreadRegistrationApplicationCountResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/admin/registration_application/count", nil, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) ListRegistrationApplications(ctx context.Context, d types.ListRegistrationApplications) (*types.ListRegistrationApplicationsResponse, error) {
ar := &types.ListRegistrationApplicationsResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/admin/registration_application/list", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) PurgeComment(ctx context.Context, d types.PurgeComment) (*types.PurgeItemResponse, error) {
ar := &types.PurgeItemResponse{}
res, err := c.req(ctx, http.MethodPost, "/admin/purge/comment", nil, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) PurgeCommunity(ctx context.Context, d types.PurgeCommunity) (*types.PurgeItemResponse, error) {
ar := &types.PurgeItemResponse{}
res, err := c.req(ctx, http.MethodPost, "/admin/purge/community", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) PurgePerson(ctx context.Context, d types.PurgePerson) (*types.PurgeItemResponse, error) {
ar := &types.PurgeItemResponse{}
res, err := c.req(ctx, http.MethodPost, "/admin/purge/person", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) PurgePost(ctx context.Context, d types.PurgePost) (*types.PurgeItemResponse, error) {
ar := &types.PurgeItemResponse{}
res, err := c.req(ctx, http.MethodPost, "/admin/purge/post", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}

View File

@@ -0,0 +1,69 @@
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)
f.HeaderComment("Code generated by go.arsenm.dev/go-lemmy/cmd/gen (routes generator). DO NOT EDIT.")
for _, r := range routes {
resStruct := impls[r.Struct]
f.Func().Params(
jen.Id("c").Id("*Client"),
).Id(transformName(r.Struct)).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)
}
func transformName(s string) string {
s = strings.TrimPrefix(s, "Get")
s = strings.TrimPrefix(s, "List")
return s
}

View File

@@ -0,0 +1,52 @@
package generator
import (
"io"
"strings"
"github.com/dave/jennifer/jen"
"go.arsenm.dev/go-lemmy/cmd/gen/parser"
)
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)
f.HeaderComment("Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.")
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 {
g.Id(field.Name).Id(field.Type).Tag(map[string]string{
"json": field.OrigName,
"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)).Id(e.Name).Op("=").Lit(string(member))
}
})
}
}
return f.Render(s.w)
}

177
cmd/gen/main.go Normal file
View File

@@ -0,0 +1,177 @@
package main
import (
"flag"
"io/fs"
"os"
"path/filepath"
"strconv"
"strings"
"go.arsenm.dev/go-lemmy/cmd/gen/generator"
"go.arsenm.dev/go-lemmy/cmd/gen/parser"
"go.arsenm.dev/logger"
"go.arsenm.dev/logger/log"
)
func init() {
log.Logger = logger.NewPretty(os.Stderr)
}
var implDirs = [...]string{
"crates/api_crud/src",
"crates/apub/src/api",
"crates/api/src",
}
var structDirs = [...]string{
"crates/api_common",
"crates/db_schema/src/source",
"crates/db_views_actor/src/structs.rs",
"crates/db_views/src/structs.rs",
"crates/db_views_moderator/src/structs.rs",
"crates/db_schema/src/aggregates/structs.rs",
"crates/db_schema/src/lib.rs",
"crates/websocket/src/lib.rs",
}
const routesFile = "src/api_routes_http.rs"
func main() {
lemmyDir := flag.String("lemmy-dir", "lemmy", "Path to Lemmy repository")
outDir := flag.String("out-dir", "out", "Directory to write output in")
flag.Parse()
baseStructDir := filepath.Join(*outDir, "types")
sp := parser.NewStruct(nil)
sp.Skip = []string{"LemmyContext"}
for _, structDir := range structDirs {
dir := filepath.Join(*lemmyDir, structDir)
err := filepath.WalkDir(dir, func(path string, d fs.DirEntry, err error) error {
if err != nil {
return nil
}
if d.IsDir() {
return nil
}
if filepath.Ext(path) != ".rs" {
return nil
}
name := d.Name()
if name == "context.rs" ||
name == "local_user_language.rs" ||
name == "chat_server.rs" {
return nil
}
fl, err := os.Open(path)
if err != nil {
return err
}
defer fl.Close()
sp.Reset(fl)
fileStructs, err := sp.Parse()
if err != nil {
return err
}
nameNoExt := strings.TrimSuffix(d.Name(), ".rs")
goFilePath := filepath.Join(baseStructDir, nameNoExt+".gen.go")
i := 1
_, err = os.Stat(goFilePath)
for err == nil {
goFilePath = filepath.Join(baseStructDir, nameNoExt+"."+strconv.Itoa(i)+".gen.go")
_, err = os.Stat(goFilePath)
i++
}
outFl, err := os.Create(goFilePath)
if err != nil {
return err
}
defer outFl.Close()
_, err = outFl.WriteString("// Source: " + path + "\n")
if err != nil {
return err
}
return generator.NewStruct(outFl, "types").Generate(fileStructs)
})
if err != nil {
log.Fatal("Error walking directory while parsing structs").Err(err).Str("dir", dir).Send()
}
}
ip := parser.NewImpl(nil)
impls := map[string]string{}
for _, implDir := range implDirs {
dir := filepath.Join(*lemmyDir, implDir)
err := filepath.WalkDir(dir, func(path string, d fs.DirEntry, err error) error {
if err != nil {
return nil
}
if d.IsDir() {
return nil
}
if filepath.Ext(path) != ".rs" {
return nil
}
fl, err := os.Open(path)
if err != nil {
return err
}
defer fl.Close()
ip.Reset(fl)
implMap, err := ip.Parse()
if err != nil {
return err
}
for reqStruct, resStruct := range implMap {
impls[reqStruct] = resStruct
}
return nil
})
if err != nil {
log.Fatal("Error walking directory while parsing impls").Err(err).Str("dir", dir).Send()
}
}
routesPath := filepath.Join(*lemmyDir, routesFile)
rf, err := os.Open(routesPath)
if err != nil {
log.Fatal("Error opening routes file").Err(err).Send()
}
defer rf.Close()
rp := parser.NewRoutes(rf)
routes, err := rp.Parse()
if err != nil {
log.Fatal("Error parsing routes file").Err(err).Send()
}
orf, err := os.Create(filepath.Join(*outDir, "routes.gen.go"))
if err != nil {
log.Fatal("Error creating routes output file").Err(err).Send()
}
defer orf.Close()
_, err = orf.WriteString("// Source: " + routesPath + "\n")
if err != nil {
log.Fatal("Error writing source string to routes file").Err(err).Send()
}
err = generator.NewRoutes(orf, "lemmy").Generate(routes, impls)
if err != nil {
log.Fatal("Error generating output routes file").Err(err).Send()
}
}

62
cmd/gen/parser/impl.go Normal file
View File

@@ -0,0 +1,62 @@
package parser
import (
"bufio"
"errors"
"io"
"regexp"
)
var (
implRegex = regexp.MustCompile(`impl Perform.* for (.+) {`)
respTypeRegex = regexp.MustCompile(`type Response = (.+);`)
)
var ErrNoType = errors.New("type line not found")
type ImplParser struct {
r *bufio.Reader
}
func NewImpl(r io.Reader) *ImplParser {
return &ImplParser{
r: bufio.NewReader(r),
}
}
func (i *ImplParser) Parse() (map[string]string, error) {
out := map[string]string{}
for {
line, err := i.r.ReadString('\n')
if errors.Is(err, io.EOF) {
break
} else if err != nil {
return nil, err
}
if implRegex.MatchString(line) {
im := implRegex.FindStringSubmatch(line)
line, err := i.r.ReadString('\n')
if errors.Is(err, io.EOF) {
return nil, io.ErrUnexpectedEOF
} else if err != nil {
return nil, err
}
if !respTypeRegex.MatchString(line) {
return nil, ErrNoType
}
rtm := respTypeRegex.FindStringSubmatch(line)
out[im[1]] = rtm[1]
}
}
return out, nil
}
func (i *ImplParser) Reset(r io.Reader) {
i.r.Reset(r)
}

121
cmd/gen/parser/routes.go Normal file
View File

@@ -0,0 +1,121 @@
package parser
import (
"bufio"
"errors"
"io"
"net/url"
"regexp"
"strings"
)
var (
scopeRegex = regexp.MustCompile(`web::(?:scope|resource)\("(.*)"\)\n`)
routeRegex = regexp.MustCompile(`\.route\(\n?\s*(?:"(.*)",[ \n])?\s*web::(.+)\(\)\.to\(route_.*::<(.+)>`)
)
type Route struct {
Path string
Method string
Struct string
}
type RoutesParser struct {
r *bufio.Reader
}
func NewRoutes(r io.Reader) *RoutesParser {
return &RoutesParser{
r: bufio.NewReader(r),
}
}
func (r *RoutesParser) Parse() ([]Route, error) {
var out []Route
for {
line, err := r.r.ReadString('\n')
if errors.Is(err, io.EOF) {
break
} else if err != nil {
return nil, err
}
if scopeRegex.MatchString(line) {
scopePath := scopeRegex.FindStringSubmatch(line)[1]
if scopePath == "/api/v3" {
continue
}
routes, err := r.parseRoutes()
if err != nil {
return nil, err
}
for i := range routes {
path, err := url.JoinPath(scopePath, routes[i].Path)
if err != nil {
return nil, err
}
routes[i].Path = path
}
out = append(out, routes...)
}
}
return out, nil
}
func (r *RoutesParser) parseRoutes() ([]Route, error) {
var out []Route
for {
line, err := r.r.ReadString('\n')
if errors.Is(err, io.EOF) {
if strings.TrimSpace(line)[:1] == ")" {
return out, nil
} else {
return nil, io.ErrUnexpectedEOF
}
} else if err != nil {
return nil, err
}
if strings.TrimSpace(line) == ".route(" {
lines, err := r.readLines(3)
if err != nil {
return nil, err
}
line += lines
}
if strings.TrimSpace(line)[:1] == ")" {
return out, nil
} else if strings.HasPrefix(line, "//") {
continue
} else if !routeRegex.MatchString(line) {
continue
}
sm := routeRegex.FindStringSubmatch(line)
out = append(out, Route{
Path: sm[1],
Method: strings.ToUpper(sm[2]),
Struct: sm[3],
})
}
}
func (r *RoutesParser) readLines(n int) (string, error) {
out := ""
for i := 0; i < n; i++ {
line, err := r.r.ReadString('\n')
if err != nil {
return "", err
}
out += line
}
return out, nil
}
func (r *RoutesParser) Reset(rd io.Reader) {
r.r.Reset(rd)
}

267
cmd/gen/parser/struct.go Normal file
View File

@@ -0,0 +1,267 @@
package parser
import (
"bufio"
"errors"
"io"
"regexp"
"strings"
"golang.org/x/exp/slices"
)
var (
structRegex = regexp.MustCompile(`pub struct (.+) \{`)
fieldRegex = regexp.MustCompile(`(?U) {1,1}([^ ]+): (.+),`)
enumRegex = regexp.MustCompile(`pub enum (.+) \{`)
memberRegex = regexp.MustCompile(` ([^ #]+),\n`)
)
type Item struct {
Struct *Struct
Enum *Enum
}
type Struct struct {
Name string
Fields []Field
}
type Field struct {
OrigName string
Name string
Type string
}
type Enum struct {
Name string
Members []Member
}
type Member string
type StructParser struct {
r *bufio.Reader
Skip []string
TransformName func(string) string
TransformType func(string) string
}
func NewStruct(r io.Reader) *StructParser {
return &StructParser{
r: bufio.NewReader(r),
TransformName: TransformNameGo,
TransformType: TransformTypeGo,
}
}
func (s *StructParser) Parse() ([]Item, error) {
var out []Item
for {
line, err := s.r.ReadString('\n')
if errors.Is(err, io.EOF) {
break
} else if err != nil {
return nil, err
}
if structRegex.MatchString(line) {
structName := structRegex.FindStringSubmatch(line)[1]
if slices.Contains(s.Skip, structName) {
continue
}
structName = s.TransformName(structName)
// If the line ends with "}", this is a struct with no fields
if strings.HasSuffix(line, "}\n") {
out = append(out, Item{
Struct: &Struct{
Name: structRegex.FindStringSubmatch(line)[1],
},
})
continue
}
fields, err := s.parseStructFields()
if err != nil {
return nil, err
}
out = append(out, Item{
Struct: &Struct{
Name: structName,
Fields: fields,
},
})
} else if enumRegex.MatchString(line) {
enumName := enumRegex.FindStringSubmatch(line)[1]
if slices.Contains(s.Skip, enumName) {
continue
}
enumName = s.TransformName(enumName)
members, err := s.parseEnumMemebers()
if err != nil {
return nil, err
}
out = append(out, Item{
Enum: &Enum{
Name: enumName,
Members: members,
},
})
}
}
return out, nil
}
func (s *StructParser) parseStructFields() ([]Field, error) {
var out []Field
for {
line, err := s.r.ReadString('\n')
if errors.Is(err, io.EOF) {
if strings.HasPrefix(line, "}") {
return out, nil
} else {
return nil, io.ErrUnexpectedEOF
}
} else if err != nil {
return nil, err
}
if strings.HasPrefix(line, "}") {
return out, nil
} else if strings.HasPrefix(line, "//") {
continue
} else if !fieldRegex.MatchString(line) {
continue
}
sm := fieldRegex.FindStringSubmatch(line)
if sm[1] == "Example" {
continue
}
out = append(out, Field{
OrigName: sm[1],
Name: s.TransformName(sm[1]),
Type: s.TransformType(sm[2]),
})
}
}
func (s *StructParser) parseEnumMemebers() ([]Member, error) {
var out []Member
for {
line, err := s.r.ReadString('\n')
if errors.Is(err, io.EOF) {
if strings.HasPrefix(line, "}") {
return out, nil
} else {
return nil, io.ErrUnexpectedEOF
}
} else if err != nil {
return nil, err
}
if strings.HasPrefix(line, "}") {
return out, nil
} else if strings.HasPrefix(line, "//") {
continue
} else if !memberRegex.MatchString(line) {
continue
}
sm := memberRegex.FindStringSubmatch(line)
out = append(out, Member(sm[1]))
}
}
// TransformTypeGo transforms Rust types to Go
//
// Example: TransformTypeGo("Option<Vec<i64>>") // returns "Optional[[]int64]"
func TransformTypeGo(t string) string {
prefix := ""
suffix := ""
for strings.HasPrefix(t, "Option<") {
t = strings.TrimPrefix(strings.TrimSuffix(t, ">"), "Option<")
prefix += "Optional["
suffix += "]"
}
for strings.HasPrefix(t, "Vec<") {
t = strings.TrimPrefix(strings.TrimSuffix(t, ">"), "Vec<")
prefix += "[]"
}
for strings.HasPrefix(t, "Sensitive<") {
t = strings.TrimPrefix(strings.TrimSuffix(t, ">"), "Sensitive<")
}
if strings.HasSuffix(t, "Id") {
t = "int"
}
switch t {
case "String", "Url", "DbUrl", "Ltree":
t = "string"
case "usize":
t = "uint"
case "i64":
t = "int64"
case "i32":
t = "int32"
case "i16":
t = "int16"
case "i8":
t = "int8"
case "chrono::NaiveDateTime":
return "LemmyTime"
case "Value":
return "any"
}
return prefix + t + suffix
}
// TransformNameGo transforms conventional Rust naming to
// conventional Go naming.
//
// Example: TransformNameGo("post_id") // returns "PostID"
func TransformNameGo(s string) string {
out := ""
s = strings.ReplaceAll(s, "Crud", "CRUD")
splitName := strings.Split(s, "_")
for _, segment := range splitName {
switch segment {
case "id":
out += "ID"
case "url":
out += "URL"
case "nsfw":
out += "NSFW"
case "jwt":
out += "JWT"
case "crud":
out += "CRUD"
default:
if len(segment) == 0 {
continue
}
out += strings.ToUpper(segment[:1]) + segment[1:]
}
}
return out
}
func (s *StructParser) Reset(r io.Reader) {
s.r.Reset(r)
}

View File

@@ -0,0 +1,49 @@
package parser
import "testing"
func TestTransformNameGo(t *testing.T) {
type testcase struct {
name string
expect string
}
cases := []testcase{
{"post_id", "PostID"},
{"nsfw", "NSFW"},
{"test_url", "TestURL"},
{"some_complex_name_with_id_and_nsfw_and_url", "SomeComplexNameWithIDAndNSFWAndURL"},
}
for _, testcase := range cases {
t.Run(testcase.name, func(t *testing.T) {
got := TransformNameGo(testcase.name)
if got != testcase.expect {
t.Errorf("Expected %s, got %s", testcase.expect, got)
}
})
}
}
func TestTransformTypeGo(t *testing.T) {
type testcase struct {
typeName string
expect string
}
cases := []testcase{
{"i16", "int16"},
{"Option<Vec<i64>>", "Optional[[]int64]"},
{"Url", "string"},
{"Sensitive<String>", "string"},
}
for _, testcase := range cases {
t.Run(testcase.typeName, func(t *testing.T) {
got := TransformTypeGo(testcase.typeName)
if got != testcase.expect {
t.Errorf("Expected %s, got %s", testcase.expect, got)
}
})
}
}

View File

@@ -1,158 +0,0 @@
package lemmy
import (
"context"
"net/http"
"go.arsenm.dev/go-lemmy/types"
)
func (c *Client) Comments(ctx context.Context, d types.GetComments) (*types.GetCommentsResponse, error) {
ar := &types.GetCommentsResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/comment/list", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) CreateComment(ctx context.Context, d types.CreateComment) (*types.CommentResponse, error) {
ar := &types.CommentResponse{}
res, err := c.req(ctx, http.MethodPost, "/comment", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) CreateCommentReport(ctx context.Context, d types.CreateCommentReport) (*types.CommentReportResponse, error) {
ar := &types.CommentReportResponse{}
res, err := c.req(ctx, http.MethodPost, "/comment/report", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) DeleteComment(ctx context.Context, d types.DeleteComment) (*types.CommentResponse, error) {
ar := &types.CommentResponse{}
res, err := c.req(ctx, http.MethodPost, "/comment/delete", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) RemoveComment(ctx context.Context, d types.RemoveComment) (*types.CommentResponse, error) {
ar := &types.CommentResponse{}
res, err := c.req(ctx, http.MethodPost, "/comment/remove", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) EditComment(ctx context.Context, d types.EditComment) (*types.CommentResponse, error) {
ar := &types.CommentResponse{}
res, err := c.req(ctx, http.MethodPut, "/comment", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) LikeComment(ctx context.Context, d types.CreateCommentLike) (*types.CommentResponse, error) {
ar := &types.CommentResponse{}
res, err := c.req(ctx, http.MethodPost, "/comment/like", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) ListCommentReports(ctx context.Context, d types.ListCommentReports) (*types.ListCommentReportsResponse, error) {
ar := &types.ListCommentReportsResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/comments/report/list", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) MarkCommentReplyAsRead(ctx context.Context, d types.MarkCommentReplyAsRead) (*types.CommentResponse, error) {
ar := &types.CommentResponse{}
res, err := c.req(ctx, http.MethodPost, "/comment/mark_as_read", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) SaveComment(ctx context.Context, d types.SaveComment) (*types.CommentResponse, error) {
ar := &types.CommentResponse{}
res, err := c.req(ctx, http.MethodPut, "/comment/save", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}

View File

@@ -1,173 +0,0 @@
package lemmy
import (
"context"
"net/http"
"go.arsenm.dev/go-lemmy/types"
)
func (c *Client) AddModToCommunity(ctx context.Context, d types.AddModToCommunity) (*types.AddModToCommunityResponse, error) {
ar := &types.AddModToCommunityResponse{}
res, err := c.req(ctx, http.MethodPost, "/community/mod", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) BanFromCommunity(ctx context.Context, d types.BanFromCommunity) (*types.BanFromCommunityResponse, error) {
ar := &types.BanFromCommunityResponse{}
res, err := c.req(ctx, http.MethodPost, "/community/ban_user", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) BlockCommunity(ctx context.Context, d types.BlockCommunity) (*types.BlockCommunityResponse, error) {
ar := &types.BlockCommunityResponse{}
res, err := c.req(ctx, http.MethodPost, "/community/block", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) CreateCommunity(ctx context.Context, d types.CreateCommunity) (*types.CommunityResponse, error) {
ar := &types.CommunityResponse{}
res, err := c.req(ctx, http.MethodPost, "/community", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) EditCommunity(ctx context.Context, d types.EditCommunity) (*types.CommunityResponse, error) {
ar := &types.CommunityResponse{}
res, err := c.req(ctx, http.MethodPut, "/community", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) FollowCommunity(ctx context.Context, d types.FollowCommunity) (*types.CommunityResponse, error) {
ar := &types.CommunityResponse{}
res, err := c.req(ctx, http.MethodPost, "/community/follow", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) DeleteCommunity(ctx context.Context, d types.DeleteCommunity) (*types.CommunityResponse, error) {
ar := &types.CommunityResponse{}
res, err := c.req(ctx, http.MethodPost, "/community/delete", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) RemoveCommunity(ctx context.Context, d types.RemoveCommunity) (*types.CommunityResponse, error) {
ar := &types.CommunityResponse{}
res, err := c.req(ctx, http.MethodPost, "/community/remove", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) Community(ctx context.Context, d types.GetCommunity) (*types.GetCommunityResponse, error) {
ar := &types.GetCommunityResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/community", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) Communities(ctx context.Context, d types.ListCommunities) (*types.ListCommunitiesResponse, error) {
ar := &types.ListCommunitiesResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/community/list", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) TransferCommunity(ctx context.Context, d types.TransferCommunity) (*types.GetCommunityResponse, error) {
ar := &types.GetCommunityResponse{}
res, err := c.req(ctx, http.MethodPost, "/community/transfer", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}

32
examples/http/main.go Normal file
View File

@@ -0,0 +1,32 @@
package main
import (
"context"
"go.arsenm.dev/go-lemmy"
"go.arsenm.dev/go-lemmy/types"
)
func main() {
ctx := context.Background()
c, err := lemmy.New("https://lemmygrad.ml")
if err != nil {
panic(err)
}
err = c.ClientLogin(ctx, types.Login{
UsernameOrEmail: "user@example.com",
Password: `TestPwd`,
})
if err != nil {
panic(err)
}
_, err = c.SaveUserSettings(ctx, types.SaveUserSettings{
BotAccount: types.NewOptional(true),
})
if err != nil {
panic(err)
}
}

View File

@@ -0,0 +1,66 @@
package main
import (
"context"
"log"
"go.arsenm.dev/go-lemmy"
"go.arsenm.dev/go-lemmy/types"
)
func main() {
ctx := context.Background()
c, err := lemmy.NewWebSocket("https://lemmygrad.ml")
if err != nil {
panic(err)
}
err = c.ClientLogin(ctx, types.Login{
UsernameOrEmail: "user@example.com",
Password: `TestPwd`,
})
if err != nil {
panic(err)
}
// If nil is passed as data, go-lemmy will just send
// the auth token, which is all that's needed for
// the UserJoin operation.
c.Request(types.UserOperationUserJoin, nil)
// Subscribe to all communities
c.Request(types.UserOperationCommunityJoin, types.CommunityJoin{
CommunityID: 0,
})
go handleErrors(c)
handleResponses(c)
}
func handleResponses(c *lemmy.WSClient) {
for res := range c.Responses() {
if res.IsOneOf(types.UserOperationCRUDCreateComment) {
var data types.CommentResponse
err := lemmy.DecodeResponse(res.Data, &data)
if err != nil {
log.Println("Error decoding response:", err)
continue
}
err = c.Request(types.UserOperationCreateCommentLike, types.CreateCommentLike{
CommentID: data.CommentView.Comment.ID,
})
if err != nil {
log.Println("Error decoding response:", err)
continue
}
}
}
}
func handleErrors(c *lemmy.WSClient) {
for err := range c.Errors() {
log.Println("Error decoding response:", err)
}
}

15
go.mod
View File

@@ -2,7 +2,20 @@ module go.arsenm.dev/go-lemmy
go 1.19
retract v0.0.0-20230105203020-27ef17a00e22
require (
github.com/cenkalti/backoff/v4 v4.2.0
github.com/dave/jennifer v1.6.0
github.com/google/go-querystring v1.1.0
github.com/mitchellh/mapstructure v1.5.0
github.com/gorilla/websocket v1.4.2
go.arsenm.dev/logger v0.0.0-20230104225304-d706171ea6df
golang.org/x/exp v0.0.0-20230105000112-eab7a2c85304
)
require (
github.com/gookit/color v1.5.1 // indirect
github.com/mattn/go-isatty v0.0.14 // indirect
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect
golang.org/x/sys v0.1.0 // indirect
)

34
go.sum
View File

@@ -1,7 +1,35 @@
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4=
github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/dave/jennifer v1.6.0 h1:MQ/6emI2xM7wt0tJzJzyUik2Q3Tcn2eE0vtYgh4GPVI=
github.com/dave/jennifer v1.6.0/go.mod h1:AxTG893FiZKqxy3FP1kL80VMshSMuz2G+EgvszgGRnk=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/gookit/color v1.5.1 h1:Vjg2VEcdHpwq+oY63s/ksHrgJYCTo0bwWvmmYWdE9fQ=
github.com/gookit/color v1.5.1/go.mod h1:wZFzea4X8qN6vHOSP2apMb4/+w/orMznEzYsIHPaqKM=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s=
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8=
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs=
go.arsenm.dev/logger v0.0.0-20230104225304-d706171ea6df h1:8mBHvEe7BJmpOeKSMA5YLqrGo9dCpePocTeR0C1+/2w=
go.arsenm.dev/logger v0.0.0-20230104225304-d706171ea6df/go.mod h1:RV2qydKDdoyaRkhAq8JEGvojR8eJ6bjq5WnSIlH7gYw=
golang.org/x/exp v0.0.0-20230105000112-eab7a2c85304 h1:YUqj+XKtfrn3kXjFIiZ8jwKROD7ioAOOHUuo3ZZ2opc=
golang.org/x/exp v0.0.0-20230105000112-eab7a2c85304/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

View File

@@ -13,16 +13,19 @@ import (
"go.arsenm.dev/go-lemmy/types"
)
// Client is a client for Lemmy's HTTP API
type Client struct {
client *http.Client
baseURL *url.URL
token string
Token string
}
// New creates a new Lemmy client with the default HTTP client.
func New(baseURL string) (*Client, error) {
return NewWithClient(baseURL, http.DefaultClient)
}
// NewWithClient creates a new Lemmy client with the given HTTP client
func NewWithClient(baseURL string, client *http.Client) (*Client, error) {
u, err := url.Parse(baseURL)
if err != nil {
@@ -33,31 +36,20 @@ func NewWithClient(baseURL string, client *http.Client) (*Client, error) {
return &Client{baseURL: u, client: client}, nil
}
func (c *Client) Login(ctx context.Context, l types.Login) error {
var lr types.LoginResponse
res, err := c.req(ctx, http.MethodPost, "/user/login", l, &lr)
// ClientLogin logs in to Lemmy by sending an HTTP request to the
// login endpoint. It stores the returned token in the client
// for future use.
func (c *Client) ClientLogin(ctx context.Context, l types.Login) error {
lr, err := c.Login(ctx, l)
if err != nil {
return err
}
err = resError(res, lr.LemmyResponse)
if err != nil {
return err
}
c.token = lr.JWT.MustValue()
c.Token = lr.JWT.MustValue()
return nil
}
func (c *Client) Token() string {
return c.token
}
func (c *Client) SetToken(t string) {
c.token = t
}
// req makes a request to the server
func (c *Client) req(ctx context.Context, method string, path string, data, resp any) (*http.Response, error) {
data = c.setAuth(data)
@@ -98,6 +90,9 @@ func (c *Client) req(ctx context.Context, method string, path string, data, resp
return res, nil
}
// getReq makes a get request to the Lemmy server.
// It is separate from req() because it uses query
// parameters rather than a JSON request body.
func (c *Client) getReq(ctx context.Context, method string, path string, data, resp any) (*http.Response, error) {
data = c.setAuth(data)
@@ -134,13 +129,14 @@ func (c *Client) getReq(ctx context.Context, method string, path string, data, r
return res, nil
}
// resError returns an error if the given response is an error
func resError(res *http.Response, lr types.LemmyResponse) error {
if lr.Error.IsValid() {
return types.LemmyError{
Code: res.StatusCode,
ErrStr: lr.Error.MustValue(),
}
} else if res.StatusCode > 299 {
} else if res.StatusCode != http.StatusOK {
return types.HTTPError{
Code: res.StatusCode,
}
@@ -149,7 +145,16 @@ func resError(res *http.Response, lr types.LemmyResponse) error {
}
}
// setAuth uses reflection to automatically
// set struct fields called Auth of type
// string or types.Optional[string] to the
// authentication token, then returns the
// updated struct
func (c *Client) setAuth(data any) any {
if data == nil {
return data
}
val := reflect.New(reflect.TypeOf(data))
val.Elem().Set(reflect.ValueOf(data))
@@ -158,12 +163,16 @@ func (c *Client) setAuth(data any) any {
return data
}
authType := authField.Kind()
if authType != reflect.String {
switch authField.Type().String() {
case "string":
authField.SetString(c.Token)
case "types.Optional[string]":
setMtd := authField.MethodByName("Set")
out := setMtd.Call([]reflect.Value{reflect.ValueOf(c.Token)})
authField.Set(out[0])
default:
return data
}
authField.SetString(c.token)
return val.Elem().Interface()
}

301
person.go
View File

@@ -1,301 +0,0 @@
package lemmy
import (
"context"
"net/http"
"go.arsenm.dev/go-lemmy/types"
)
func (c *Client) BanPerson(ctx context.Context, d types.BanPerson) (*types.BanPersonResponse, error) {
ar := &types.BanPersonResponse{}
res, err := c.req(ctx, http.MethodPost, "/user/ban", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) BlockPerson(ctx context.Context, d types.BlockPerson) (*types.BlockPersonResponse, error) {
ar := &types.BlockPersonResponse{}
res, err := c.req(ctx, http.MethodPost, "/user/block", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) ChangePassword(ctx context.Context, d types.ChangePassword) (*types.LoginResponse, error) {
ar := &types.LoginResponse{}
res, err := c.req(ctx, http.MethodPut, "/user/change_password", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
c.token = ar.JWT.MustValue()
return ar, nil
}
func (c *Client) DeleteAccount(ctx context.Context, d types.DeleteAccount) (*types.DeleteAccountResponse, error) {
ar := &types.DeleteAccountResponse{}
res, err := c.req(ctx, http.MethodPost, "/user/delete_account", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) BannedPersons(ctx context.Context, d types.GetBannedPersons) (*types.BannedPersonsResponse, error) {
ar := &types.BannedPersonsResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/user/banned", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) Captcha(ctx context.Context, d types.GetCaptcha) (*types.CaptchaResponse, error) {
ar := &types.CaptchaResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/user/get_captcha", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) PersonDetails(ctx context.Context, d types.GetPersonDetails) (*types.GetPersonDetailsResponse, error) {
ar := &types.GetPersonDetailsResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/user", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) PersonMentions(ctx context.Context, d types.GetPersonMentions) (*types.GetPersonMentionsResponse, error) {
ar := &types.GetPersonMentionsResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/user/mention", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) Replies(ctx context.Context, d types.GetReplies) (*types.GetRepliesResponse, error) {
ar := &types.GetRepliesResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/user/replies", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) ReportCount(ctx context.Context, d types.GetReportCount) (*types.GetReportCountResponse, error) {
ar := &types.GetReportCountResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/user/report_count", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) UnreadCount(ctx context.Context, d types.GetUnreadCount) (*types.GetUnreadCountResponse, error) {
ar := &types.GetUnreadCountResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/user/unread_count", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) LeaveAdmin(ctx context.Context, d types.LeaveAdmin) (*types.GetSiteResponse, error) {
ar := &types.GetSiteResponse{}
res, err := c.req(ctx, http.MethodPost, "/user/leave_admin", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) MarkAllAsRead(ctx context.Context, d types.MarkAllAsRead) (*types.GetRepliesResponse, error) {
ar := &types.GetRepliesResponse{}
res, err := c.req(ctx, http.MethodPost, "/user/mark_all_as_read", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) MarkPersonMentionAsRead(ctx context.Context, d types.MarkPersonMentionAsRead) (*types.PersonMentionResponse, error) {
ar := &types.PersonMentionResponse{}
res, err := c.req(ctx, http.MethodPost, "/user/mention/mark_as_read", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) PasswordChange(ctx context.Context, d types.PasswordChange) (*types.LoginResponse, error) {
ar := &types.LoginResponse{}
res, err := c.req(ctx, http.MethodPost, "/user/password_change", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
c.token = ar.JWT.MustValue()
return ar, nil
}
func (c *Client) PasswordReset(ctx context.Context, d types.PasswordReset) (*types.PasswordResetResponse, error) {
ar := &types.PasswordResetResponse{}
res, err := c.req(ctx, http.MethodPost, "/user/password_reset", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) Register(ctx context.Context, d types.Register) (*types.LoginResponse, error) {
ar := &types.LoginResponse{}
res, err := c.req(ctx, http.MethodPost, "/user/register", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
c.token = ar.JWT.MustValue()
return ar, nil
}
func (c *Client) SaveUserSettings(ctx context.Context, d types.SaveUserSettings) (*types.LoginResponse, error) {
ar := &types.LoginResponse{}
res, err := c.req(ctx, http.MethodPut, "/user/save_user_settings", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
c.token = ar.JWT.MustValue()
return ar, nil
}
func (c *Client) VerifyEmail(ctx context.Context, d types.VerifyEmail) (*types.VerifyEmailResponse, error) {
ar := &types.VerifyEmailResponse{}
res, err := c.req(ctx, http.MethodPut, "/user/verify_email", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}

233
post.go
View File

@@ -1,233 +0,0 @@
package lemmy
import (
"context"
"net/http"
"go.arsenm.dev/go-lemmy/types"
)
func (c *Client) CreatePost(ctx context.Context, d types.CreatePost) (*types.PostResponse, error) {
ar := &types.PostResponse{}
res, err := c.req(ctx, http.MethodPost, "/post", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) EditPost(ctx context.Context, d types.EditPost) (*types.PostResponse, error) {
ar := &types.PostResponse{}
res, err := c.req(ctx, http.MethodPut, "/post", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) Post(ctx context.Context, d types.GetPost) (*types.GetPostResponse, error) {
ar := &types.GetPostResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/post", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) CreatePostReport(ctx context.Context, d types.CreatePostReport) (*types.PostReportResponse, error) {
ar := &types.PostReportResponse{}
res, err := c.req(ctx, http.MethodPost, "/post/report", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) DeletePost(ctx context.Context, d types.DeletePost) (*types.PostResponse, error) {
ar := &types.PostResponse{}
res, err := c.req(ctx, http.MethodPost, "/post/delete", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) RemovePost(ctx context.Context, d types.RemovePost) (*types.PostResponse, error) {
ar := &types.PostResponse{}
res, err := c.req(ctx, http.MethodPost, "/post/remove", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) Posts(ctx context.Context, d types.GetPosts) (*types.GetPostsResponse, error) {
ar := &types.GetPostsResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/post/list", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) SiteMetadata(ctx context.Context, d types.GetSiteMetadata) (*types.GetSiteMetadataResponse, error) {
ar := &types.GetSiteMetadataResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/post/site_metadata", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) LikePost(ctx context.Context, d types.CreatePostLike) (*types.PostResponse, error) {
ar := &types.PostResponse{}
res, err := c.req(ctx, http.MethodPost, "/post/like", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) ListPostReports(ctx context.Context, d types.ListPostReports) (*types.ListPostReportsResponse, error) {
ar := &types.ListPostReportsResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/post/report/list", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) LockPost(ctx context.Context, d types.LockPost) (*types.PostResponse, error) {
ar := &types.PostResponse{}
res, err := c.req(ctx, http.MethodPost, "/post/lock", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) MarkPostAsRead(ctx context.Context, d types.MarkPostAsRead) (*types.PostResponse, error) {
ar := &types.PostResponse{}
res, err := c.req(ctx, http.MethodPost, "/post/mark_as_read", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) ResolvePostReport(ctx context.Context, d types.ResolvePostReport) (*types.PostReportResponse, error) {
ar := &types.PostReportResponse{}
res, err := c.req(ctx, http.MethodPut, "/post/report/resolve", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) SavePost(ctx context.Context, d types.SavePost) (*types.PostResponse, error) {
ar := &types.PostResponse{}
res, err := c.req(ctx, http.MethodPut, "/post/save", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) StickyPost(ctx context.Context, d types.StickyPost) (*types.PostResponse, error) {
ar := &types.PostResponse{}
res, err := c.req(ctx, http.MethodPost, "/post/sticky", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}

View File

@@ -1,128 +0,0 @@
package lemmy
import (
"context"
"net/http"
"go.arsenm.dev/go-lemmy/types"
)
func (c *Client) CreatePrivateMessage(ctx context.Context, d types.CreatePrivateMessage) (*types.PrivateMessageResponse, error) {
ar := &types.PrivateMessageResponse{}
res, err := c.req(ctx, http.MethodPost, "/private_message", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) CreatePrivateMessageReport(ctx context.Context, d types.CreatePrivateMessageReport) (*types.PrivateMessageReportResponse, error) {
ar := &types.PrivateMessageReportResponse{}
res, err := c.req(ctx, http.MethodPost, "/private_message/report", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) DeletePrivateMessage(ctx context.Context, d types.DeletePrivateMessage) (*types.PrivateMessageResponse, error) {
ar := &types.PrivateMessageResponse{}
res, err := c.req(ctx, http.MethodPost, "/private_message/delete", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) EditPrivateMessage(ctx context.Context, d types.EditPrivateMessage) (*types.PrivateMessageResponse, error) {
ar := &types.PrivateMessageResponse{}
res, err := c.req(ctx, http.MethodPut, "/private_message", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) PrivateMessages(ctx context.Context, d types.GetPrivateMessages) (*types.PrivateMessagesResponse, error) {
ar := &types.PrivateMessagesResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/private_message/list", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) PrivateMessageReports(ctx context.Context, d types.ListPrivateMessageReports) (*types.ListPrivateMessageReportsResponse, error) {
ar := &types.ListPrivateMessageReportsResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/private_message/report/list", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) MarkPrivateMessageAsRead(ctx context.Context, d types.MarkPrivateMessageAsRead) (*types.PrivateMessageResponse, error) {
ar := &types.PrivateMessageResponse{}
res, err := c.req(ctx, http.MethodPost, "/private_message/mark_as_read", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) ResolvePrivateMessageReport(ctx context.Context, d types.ResolvePrivateMessageReport) (*types.PrivateMessageReportResponse, error) {
ar := &types.PrivateMessageReportResponse{}
res, err := c.req(ctx, http.MethodPut, "/private_message/report/resolve", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}

1030
routes.gen.go Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,23 +0,0 @@
package lemmy
import (
"context"
"net/http"
"go.arsenm.dev/go-lemmy/types"
)
func (c *Client) Search(ctx context.Context, d types.Search) (*types.SearchResponse, error) {
ar := &types.SearchResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/search", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}

53
site.go
View File

@@ -1,53 +0,0 @@
package lemmy
import (
"context"
"net/http"
"go.arsenm.dev/go-lemmy/types"
)
func (c *Client) CreateSite(ctx context.Context, d types.CreateSite) (*types.SiteResponse, error) {
ar := &types.SiteResponse{}
res, err := c.req(ctx, http.MethodPost, "/site", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) EditSite(ctx context.Context, d types.EditSite) (*types.SiteResponse, error) {
ar := &types.SiteResponse{}
res, err := c.req(ctx, http.MethodPut, "/site", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}
func (c *Client) Site(ctx context.Context, d types.GetSite) (*types.GetSiteResponse, error) {
ar := &types.GetSiteResponse{}
res, err := c.getReq(ctx, http.MethodGet, "/site", d, &ar)
if err != nil {
return nil, err
}
err = resError(res, ar.LemmyResponse)
if err != nil {
return nil, err
}
return ar, nil
}

27
types/activity.gen.go Normal file
View File

@@ -0,0 +1,27 @@
// Source: lemmy/crates/db_schema/src/source/activity.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type Activity struct {
ID int32 `json:"id" url:"id,omitempty"`
Data any `json:"data" url:"data,omitempty"`
Local bool `json:"local" url:"local,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
ApID string `json:"ap_id" url:"ap_id,omitempty"`
Sensitive Optional[bool] `json:"sensitive" url:"sensitive,omitempty"`
}
type ActivityInsertForm struct {
Data any `json:"data" url:"data,omitempty"`
Local Optional[bool] `json:"local" url:"local,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
ApID string `json:"ap_id" url:"ap_id,omitempty"`
Sensitive Optional[bool] `json:"sensitive" url:"sensitive,omitempty"`
}
type ActivityUpdateForm struct {
Data any `json:"data" url:"data,omitempty"`
Local Optional[bool] `json:"local" url:"local,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
Sensitive Optional[Optional[bool]] `json:"sensitive" url:"sensitive,omitempty"`
}

View File

@@ -0,0 +1,32 @@
// Source: lemmy/crates/db_schema/src/source/actor_language.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type LocalUserLanguage struct {
ID int `json:"id" url:"id,omitempty"`
LocalUserID int `json:"local_user_id" url:"local_user_id,omitempty"`
LanguageID int `json:"language_id" url:"language_id,omitempty"`
}
type LocalUserLanguageForm struct {
LocalUserID int `json:"local_user_id" url:"local_user_id,omitempty"`
LanguageID int `json:"language_id" url:"language_id,omitempty"`
}
type CommunityLanguage struct {
ID int `json:"id" url:"id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
LanguageID int `json:"language_id" url:"language_id,omitempty"`
}
type CommunityLanguageForm struct {
CommunityID int `json:"community_id" url:"community_id,omitempty"`
LanguageID int `json:"language_id" url:"language_id,omitempty"`
}
type SiteLanguage struct {
ID int `json:"id" url:"id,omitempty"`
SiteID int `json:"site_id" url:"site_id,omitempty"`
LanguageID int `json:"language_id" url:"language_id,omitempty"`
}
type SiteLanguageForm struct {
SiteID int `json:"site_id" url:"site_id,omitempty"`
LanguageID int `json:"language_id" url:"language_id,omitempty"`
}

View File

@@ -1,55 +0,0 @@
package types
type PersonAggregates struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
PersonID int `json:"person_id,omitempty" url:"person_id,omitempty"`
PostCount int `json:"post_count,omitempty" url:"post_count,omitempty"`
PostScore int `json:"post_score,omitempty" url:"post_score,omitempty"`
CommentCount int `json:"comment_count,omitempty" url:"comment_count,omitempty"`
CommentScore int `json:"comment_score,omitempty" url:"comment_score,omitempty"`
}
type SiteAggregates struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
SiteID int `json:"site_id,omitempty" url:"site_id,omitempty"`
Users int `json:"users,omitempty" url:"users,omitempty"`
Posts int `json:"posts,omitempty" url:"posts,omitempty"`
Comments int `json:"comments,omitempty" url:"comments,omitempty"`
Communities int `json:"communities,omitempty" url:"communities,omitempty"`
UsersActiveDay int `json:"users_active_day,omitempty" url:"users_active_day,omitempty"`
UsersActiveWeek int `json:"users_active_week,omitempty" url:"users_active_week,omitempty"`
UsersActiveMonth int `json:"users_active_month,omitempty" url:"users_active_month,omitempty"`
UsersActiveHalfYear int `json:"users_active_half_year,omitempty" url:"users_active_half_year,omitempty"`
}
type PostAggregates struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
PostID int `json:"post_id,omitempty" url:"post_id,omitempty"`
Comments int `json:"comments,omitempty" url:"comments,omitempty"`
Score int `json:"score,omitempty" url:"score,omitempty"`
Upvotes int `json:"upvotes,omitempty" url:"upvotes,omitempty"`
Downvotes int `json:"downvotes,omitempty" url:"downvotes,omitempty"`
NewestCommentTimeNecro string `json:"newest_comment_time_necro,omitempty" url:"newest_comment_time_necro,omitempty"`
NewestCommentTime string `json:"newest_comment_time,omitempty" url:"newest_comment_time,omitempty"`
}
type CommunityAggregates struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
Subscribers int `json:"subscribers,omitempty" url:"subscribers,omitempty"`
Posts int `json:"posts,omitempty" url:"posts,omitempty"`
Comments int `json:"comments,omitempty" url:"comments,omitempty"`
UsersActiveDay int `json:"users_active_day,omitempty" url:"users_active_day,omitempty"`
UsersActiveWeek int `json:"users_active_week,omitempty" url:"users_active_week,omitempty"`
UsersActiveMonth int `json:"users_active_month,omitempty" url:"users_active_month,omitempty"`
UsersActiveHalfYear int `json:"users_active_half_year,omitempty" url:"users_active_half_year,omitempty"`
}
type CommentAggregates struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
CommentID int `json:"comment_id,omitempty" url:"comment_id,omitempty"`
Score int `json:"score,omitempty" url:"score,omitempty"`
Upvotes int `json:"upvotes,omitempty" url:"upvotes,omitempty"`
Downvotes int `json:"downvotes,omitempty" url:"downvotes,omitempty"`
ChildCount int `json:"child_count,omitempty" url:"child_count,omitempty"`
}

67
types/comment.1.gen.go Normal file
View File

@@ -0,0 +1,67 @@
// Source: lemmy/crates/db_schema/src/source/comment.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type Comment struct {
ID int `json:"id" url:"id,omitempty"`
CreatorID int `json:"creator_id" url:"creator_id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
Content string `json:"content" url:"content,omitempty"`
Removed bool `json:"removed" url:"removed,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
Deleted bool `json:"deleted" url:"deleted,omitempty"`
ApID string `json:"ap_id" url:"ap_id,omitempty"`
Local bool `json:"local" url:"local,omitempty"`
Path string `json:"path" url:"path,omitempty"`
Distinguished bool `json:"distinguished" url:"distinguished,omitempty"`
LanguageID int `json:"language_id" url:"language_id,omitempty"`
}
type CommentInsertForm struct {
CreatorID int `json:"creator_id" url:"creator_id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
Content string `json:"content" url:"content,omitempty"`
Removed Optional[bool] `json:"removed" url:"removed,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
Deleted Optional[bool] `json:"deleted" url:"deleted,omitempty"`
ApID Optional[string] `json:"ap_id" url:"ap_id,omitempty"`
Local Optional[bool] `json:"local" url:"local,omitempty"`
Distinguished Optional[bool] `json:"distinguished" url:"distinguished,omitempty"`
LanguageID Optional[int] `json:"language_id" url:"language_id,omitempty"`
}
type CommentUpdateForm struct {
Content Optional[string] `json:"content" url:"content,omitempty"`
Removed Optional[bool] `json:"removed" url:"removed,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
Deleted Optional[bool] `json:"deleted" url:"deleted,omitempty"`
ApID Optional[string] `json:"ap_id" url:"ap_id,omitempty"`
Local Optional[bool] `json:"local" url:"local,omitempty"`
Distinguished Optional[bool] `json:"distinguished" url:"distinguished,omitempty"`
LanguageID Optional[int] `json:"language_id" url:"language_id,omitempty"`
}
type CommentLike struct {
ID int32 `json:"id" url:"id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
Score int16 `json:"score" url:"score,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
}
type CommentLikeForm struct {
PersonID int `json:"person_id" url:"person_id,omitempty"`
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
Score int16 `json:"score" url:"score,omitempty"`
}
type CommentSaved struct {
ID int32 `json:"id" url:"id,omitempty"`
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
}
type CommentSavedForm struct {
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
}

94
types/comment.gen.go Normal file
View File

@@ -0,0 +1,94 @@
// Source: lemmy/crates/api_common/src/comment.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type CreateComment struct {
Content string `json:"content" url:"content,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
ParentID Optional[int] `json:"parent_id" url:"parent_id,omitempty"`
LanguageID Optional[int] `json:"language_id" url:"language_id,omitempty"`
FormID Optional[string] `json:"form_id" url:"form_id,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type GetComment struct {
ID int `json:"id" url:"id,omitempty"`
Auth Optional[string] `json:"auth" url:"auth,omitempty"`
}
type EditComment struct {
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
Content Optional[string] `json:"content" url:"content,omitempty"`
Distinguished Optional[bool] `json:"distinguished" url:"distinguished,omitempty"`
LanguageID Optional[int] `json:"language_id" url:"language_id,omitempty"`
FormID Optional[string] `json:"form_id" url:"form_id,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type DeleteComment struct {
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
Deleted bool `json:"deleted" url:"deleted,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type RemoveComment struct {
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
Removed bool `json:"removed" url:"removed,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type SaveComment struct {
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
Save bool `json:"save" url:"save,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type CommentResponse struct {
CommentView CommentView `json:"comment_view" url:"comment_view,omitempty"`
RecipientIds []int `json:"recipient_ids" url:"recipient_ids,omitempty"`
FormID Optional[string] `json:"form_id" url:"form_id,omitempty"`
LemmyResponse
}
type CreateCommentLike struct {
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
Score int16 `json:"score" url:"score,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type GetComments struct {
Type Optional[ListingType] `json:"type_" url:"type_,omitempty"`
Sort Optional[CommentSortType] `json:"sort" url:"sort,omitempty"`
MaxDepth Optional[int32] `json:"max_depth" url:"max_depth,omitempty"`
Page Optional[int64] `json:"page" url:"page,omitempty"`
Limit Optional[int64] `json:"limit" url:"limit,omitempty"`
CommunityID Optional[int] `json:"community_id" url:"community_id,omitempty"`
CommunityName Optional[string] `json:"community_name" url:"community_name,omitempty"`
PostID Optional[int] `json:"post_id" url:"post_id,omitempty"`
ParentID Optional[int] `json:"parent_id" url:"parent_id,omitempty"`
SavedOnly Optional[bool] `json:"saved_only" url:"saved_only,omitempty"`
Auth Optional[string] `json:"auth" url:"auth,omitempty"`
}
type GetCommentsResponse struct {
Comments []CommentView `json:"comments" url:"comments,omitempty"`
LemmyResponse
}
type CreateCommentReport struct {
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
Reason string `json:"reason" url:"reason,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type CommentReportResponse struct {
CommentReportView CommentReportView `json:"comment_report_view" url:"comment_report_view,omitempty"`
LemmyResponse
}
type ResolveCommentReport struct {
ReportID int `json:"report_id" url:"report_id,omitempty"`
Resolved bool `json:"resolved" url:"resolved,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type ListCommentReports struct {
Page Optional[int64] `json:"page" url:"page,omitempty"`
Limit Optional[int64] `json:"limit" url:"limit,omitempty"`
UnresolvedOnly Optional[bool] `json:"unresolved_only" url:"unresolved_only,omitempty"`
CommunityID Optional[int] `json:"community_id" url:"community_id,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type ListCommentReportsResponse struct {
CommentReports []CommentReportView `json:"comment_reports" url:"comment_reports,omitempty"`
LemmyResponse
}

View File

@@ -1,105 +0,0 @@
package types
type CreateComment struct {
Content string `json:"content,omitempty" url:"content,omitempty"`
PostID int `json:"post_id,omitempty" url:"post_id,omitempty"`
ParentID Optional[int] `json:"parent_id,omitempty" url:"parent_id,omitempty"`
LanguageID Optional[int] `json:"language_id,omitempty" url:"language_id,omitempty"`
FormID Optional[string] `json:"form_id,omitempty" url:"form_id,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type GetComment struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type EditComment struct {
CommentID int `json:"comment_id,omitempty" url:"comment_id,omitempty"`
Content Optional[string] `json:"content,omitempty" url:"content,omitempty"`
Distinguished Optional[bool] `json:"distinguished,omitempty" url:"distinguished,omitempty"`
LanguageID Optional[int] `json:"language_id,omitempty" url:"language_id,omitempty"`
FormID Optional[string] `json:"form_id,omitempty" url:"form_id,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type DeleteComment struct {
CommentID int `json:"comment_id,omitempty" url:"comment_id,omitempty"`
Deleted bool `json:"deleted,omitempty" url:"deleted,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type RemoveComment struct {
CommentID int `json:"comment_id,omitempty" url:"comment_id,omitempty"`
Removed bool `json:"removed,omitempty" url:"removed,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type SaveComment struct {
CommentID int `json:"comment_id,omitempty" url:"comment_id,omitempty"`
Save bool `json:"save,omitempty" url:"save,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type CommentResponse struct {
CommentView CommentView `json:"comment_view,omitempty" url:"comment_view,omitempty"`
RecipientIDs []int `json:"recipient_i_ds,omitempty" url:"recipient_i_ds,omitempty"`
FormID Optional[string] `json:"form_id,omitempty" url:"form_id,omitempty"`
LemmyResponse
}
type CreateCommentLike struct {
CommentID int `json:"comment_id,omitempty" url:"comment_id,omitempty"`
Score int16 `json:"score,omitempty" url:"score,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type GetComments struct {
Type Optional[ListingType] `json:"type,omitempty" url:"type,omitempty"`
Sort Optional[CommentSortType] `json:"sort,omitempty" url:"sort,omitempty"`
MaxDepth Optional[int] `json:"max_depth,omitempty" url:"max_depth,omitempty"`
Page Optional[int] `json:"page,omitempty" url:"page,omitempty"`
Limit Optional[int] `json:"limit,omitempty" url:"limit,omitempty"`
CommunityID Optional[int] `json:"community_id,omitempty" url:"community_id,omitempty"`
CommunityName Optional[string] `json:"community_name,omitempty" url:"community_name,omitempty"`
PostID Optional[int] `json:"post_id,omitempty" url:"post_id,omitempty"`
ParentID Optional[int] `json:"parent_id,omitempty" url:"parent_id,omitempty"`
SavedOnly Optional[bool] `json:"saved_only,omitempty" url:"saved_only,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type GetCommentsResponse struct {
Comments []CommentView `json:"comments,omitempty" url:"comments,omitempty"`
LemmyResponse
}
type CreateCommentReport struct {
CommentID int `json:"comment_id,omitempty" url:"comment_id,omitempty"`
Reason string `json:"reason,omitempty" url:"reason,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type CommentReportResponse struct {
CommentReportView CommentReportView `json:"comment_report_view,omitempty" url:"comment_report_view,omitempty"`
LemmyResponse
}
type ResolveCommentReport struct {
ReportID int `json:"report_id,omitempty" url:"report_id,omitempty"`
Resolved bool `json:"resolved,omitempty" url:"resolved,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type ListCommentReports struct {
Page Optional[int] `json:"page,omitempty" url:"page,omitempty"`
Limit Optional[int] `json:"limit,omitempty" url:"limit,omitempty"`
UnresolvedOnly Optional[bool] `json:"unresolved_only,omitempty" url:"unresolved_only,omitempty"`
CommunityID Optional[int] `json:"community_id,omitempty" url:"community_id,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type ListCommentReportsResponse struct {
CommentReports []CommentReportView `json:"comment_reports,omitempty" url:"comment_reports,omitempty"`
LemmyResponse
}

View File

@@ -0,0 +1,20 @@
// Source: lemmy/crates/db_schema/src/source/comment_reply.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type CommentReply struct {
ID int `json:"id" url:"id,omitempty"`
RecipientID int `json:"recipient_id" url:"recipient_id,omitempty"`
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
Read bool `json:"read" url:"read,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
}
type CommentReplyInsertForm struct {
RecipientID int `json:"recipient_id" url:"recipient_id,omitempty"`
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
Read Optional[bool] `json:"read" url:"read,omitempty"`
}
type CommentReplyUpdateForm struct {
Read Optional[bool] `json:"read" url:"read,omitempty"`
}

View File

@@ -0,0 +1,22 @@
// Source: lemmy/crates/db_schema/src/source/comment_report.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type CommentReport struct {
ID int `json:"id" url:"id,omitempty"`
CreatorID int `json:"creator_id" url:"creator_id,omitempty"`
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
OriginalCommentText string `json:"original_comment_text" url:"original_comment_text,omitempty"`
Reason string `json:"reason" url:"reason,omitempty"`
Resolved bool `json:"resolved" url:"resolved,omitempty"`
ResolverID Optional[int] `json:"resolver_id" url:"resolver_id,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
}
type CommentReportForm struct {
CreatorID int `json:"creator_id" url:"creator_id,omitempty"`
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
OriginalCommentText string `json:"original_comment_text" url:"original_comment_text,omitempty"`
Reason string `json:"reason" url:"reason,omitempty"`
}

125
types/community.1.gen.go Normal file
View File

@@ -0,0 +1,125 @@
// Source: lemmy/crates/db_schema/src/source/community.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type Community struct {
ID int `json:"id" url:"id,omitempty"`
Name string `json:"name" url:"name,omitempty"`
Title string `json:"title" url:"title,omitempty"`
Description Optional[string] `json:"description" url:"description,omitempty"`
Removed bool `json:"removed" url:"removed,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
Deleted bool `json:"deleted" url:"deleted,omitempty"`
NSFW bool `json:"nsfw" url:"nsfw,omitempty"`
ActorID string `json:"actor_id" url:"actor_id,omitempty"`
Local bool `json:"local" url:"local,omitempty"`
PrivateKey Optional[string] `json:"private_key" url:"private_key,omitempty"`
PublicKey string `json:"public_key" url:"public_key,omitempty"`
LastRefreshedAt LemmyTime `json:"last_refreshed_at" url:"last_refreshed_at,omitempty"`
Icon Optional[string] `json:"icon" url:"icon,omitempty"`
Banner Optional[string] `json:"banner" url:"banner,omitempty"`
FollowersURL string `json:"followers_url" url:"followers_url,omitempty"`
InboxURL string `json:"inbox_url" url:"inbox_url,omitempty"`
SharedInboxURL Optional[string] `json:"shared_inbox_url" url:"shared_inbox_url,omitempty"`
Hidden bool `json:"hidden" url:"hidden,omitempty"`
PostingRestrictedToMods bool `json:"posting_restricted_to_mods" url:"posting_restricted_to_mods,omitempty"`
InstanceID int `json:"instance_id" url:"instance_id,omitempty"`
}
type CommunitySafe struct {
ID int `json:"id" url:"id,omitempty"`
Name string `json:"name" url:"name,omitempty"`
Title string `json:"title" url:"title,omitempty"`
Description Optional[string] `json:"description" url:"description,omitempty"`
Removed bool `json:"removed" url:"removed,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
Deleted bool `json:"deleted" url:"deleted,omitempty"`
NSFW bool `json:"nsfw" url:"nsfw,omitempty"`
ActorID string `json:"actor_id" url:"actor_id,omitempty"`
Local bool `json:"local" url:"local,omitempty"`
Icon Optional[string] `json:"icon" url:"icon,omitempty"`
Banner Optional[string] `json:"banner" url:"banner,omitempty"`
Hidden bool `json:"hidden" url:"hidden,omitempty"`
PostingRestrictedToMods bool `json:"posting_restricted_to_mods" url:"posting_restricted_to_mods,omitempty"`
InstanceID int `json:"instance_id" url:"instance_id,omitempty"`
}
type CommunityInsertForm struct {
Name string `json:"name" url:"name,omitempty"`
Title string `json:"title" url:"title,omitempty"`
Description Optional[string] `json:"description" url:"description,omitempty"`
Removed Optional[bool] `json:"removed" url:"removed,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
Deleted Optional[bool] `json:"deleted" url:"deleted,omitempty"`
NSFW Optional[bool] `json:"nsfw" url:"nsfw,omitempty"`
ActorID Optional[string] `json:"actor_id" url:"actor_id,omitempty"`
Local Optional[bool] `json:"local" url:"local,omitempty"`
PrivateKey Optional[string] `json:"private_key" url:"private_key,omitempty"`
PublicKey string `json:"public_key" url:"public_key,omitempty"`
LastRefreshedAt LemmyTime `json:"last_refreshed_at" url:"last_refreshed_at,omitempty"`
Icon Optional[string] `json:"icon" url:"icon,omitempty"`
Banner Optional[string] `json:"banner" url:"banner,omitempty"`
FollowersURL Optional[string] `json:"followers_url" url:"followers_url,omitempty"`
InboxURL Optional[string] `json:"inbox_url" url:"inbox_url,omitempty"`
SharedInboxURL Optional[string] `json:"shared_inbox_url" url:"shared_inbox_url,omitempty"`
Hidden Optional[bool] `json:"hidden" url:"hidden,omitempty"`
PostingRestrictedToMods Optional[bool] `json:"posting_restricted_to_mods" url:"posting_restricted_to_mods,omitempty"`
InstanceID int `json:"instance_id" url:"instance_id,omitempty"`
}
type CommunityUpdateForm struct {
Title Optional[string] `json:"title" url:"title,omitempty"`
Description Optional[Optional[string]] `json:"description" url:"description,omitempty"`
Removed Optional[bool] `json:"removed" url:"removed,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
Deleted Optional[bool] `json:"deleted" url:"deleted,omitempty"`
NSFW Optional[bool] `json:"nsfw" url:"nsfw,omitempty"`
ActorID Optional[string] `json:"actor_id" url:"actor_id,omitempty"`
Local Optional[bool] `json:"local" url:"local,omitempty"`
PublicKey Optional[string] `json:"public_key" url:"public_key,omitempty"`
PrivateKey Optional[Optional[string]] `json:"private_key" url:"private_key,omitempty"`
LastRefreshedAt LemmyTime `json:"last_refreshed_at" url:"last_refreshed_at,omitempty"`
Icon Optional[Optional[string]] `json:"icon" url:"icon,omitempty"`
Banner Optional[Optional[string]] `json:"banner" url:"banner,omitempty"`
FollowersURL Optional[string] `json:"followers_url" url:"followers_url,omitempty"`
InboxURL Optional[string] `json:"inbox_url" url:"inbox_url,omitempty"`
SharedInboxURL Optional[Optional[string]] `json:"shared_inbox_url" url:"shared_inbox_url,omitempty"`
Hidden Optional[bool] `json:"hidden" url:"hidden,omitempty"`
PostingRestrictedToMods Optional[bool] `json:"posting_restricted_to_mods" url:"posting_restricted_to_mods,omitempty"`
}
type CommunityModerator struct {
ID int32 `json:"id" url:"id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
}
type CommunityModeratorForm struct {
CommunityID int `json:"community_id" url:"community_id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
}
type CommunityPersonBan struct {
ID int32 `json:"id" url:"id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Expires LemmyTime `json:"expires" url:"expires,omitempty"`
}
type CommunityPersonBanForm struct {
CommunityID int `json:"community_id" url:"community_id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
Expires LemmyTime `json:"expires" url:"expires,omitempty"`
}
type CommunityFollower struct {
ID int32 `json:"id" url:"id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Pending bool `json:"pending" url:"pending,omitempty"`
}
type CommunityFollowerForm struct {
CommunityID int `json:"community_id" url:"community_id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
Pending bool `json:"pending" url:"pending,omitempty"`
}

119
types/community.gen.go Normal file
View File

@@ -0,0 +1,119 @@
// Source: lemmy/crates/api_common/src/community.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type GetCommunity struct {
ID Optional[int] `json:"id" url:"id,omitempty"`
Name Optional[string] `json:"name" url:"name,omitempty"`
Auth Optional[string] `json:"auth" url:"auth,omitempty"`
}
type GetCommunityResponse struct {
CommunityView CommunityView `json:"community_view" url:"community_view,omitempty"`
Site Optional[Site] `json:"site" url:"site,omitempty"`
Moderators []CommunityModeratorView `json:"moderators" url:"moderators,omitempty"`
Online uint `json:"online" url:"online,omitempty"`
DiscussionLanguages []int `json:"discussion_languages" url:"discussion_languages,omitempty"`
DefaultPostLanguage Optional[int] `json:"default_post_language" url:"default_post_language,omitempty"`
LemmyResponse
}
type CreateCommunity struct {
Name string `json:"name" url:"name,omitempty"`
Title string `json:"title" url:"title,omitempty"`
Description Optional[string] `json:"description" url:"description,omitempty"`
Icon Optional[string] `json:"icon" url:"icon,omitempty"`
Banner Optional[string] `json:"banner" url:"banner,omitempty"`
NSFW Optional[bool] `json:"nsfw" url:"nsfw,omitempty"`
PostingRestrictedToMods Optional[bool] `json:"posting_restricted_to_mods" url:"posting_restricted_to_mods,omitempty"`
DiscussionLanguages Optional[[]int] `json:"discussion_languages" url:"discussion_languages,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type CommunityResponse struct {
CommunityView CommunityView `json:"community_view" url:"community_view,omitempty"`
DiscussionLanguages []int `json:"discussion_languages" url:"discussion_languages,omitempty"`
LemmyResponse
}
type ListCommunities struct {
Type Optional[ListingType] `json:"type_" url:"type_,omitempty"`
Sort Optional[SortType] `json:"sort" url:"sort,omitempty"`
Page Optional[int64] `json:"page" url:"page,omitempty"`
Limit Optional[int64] `json:"limit" url:"limit,omitempty"`
Auth Optional[string] `json:"auth" url:"auth,omitempty"`
}
type ListCommunitiesResponse struct {
Communities []CommunityView `json:"communities" url:"communities,omitempty"`
LemmyResponse
}
type BanFromCommunity struct {
CommunityID int `json:"community_id" url:"community_id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
Ban bool `json:"ban" url:"ban,omitempty"`
RemoveData Optional[bool] `json:"remove_data" url:"remove_data,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Expires Optional[int64] `json:"expires" url:"expires,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type BanFromCommunityResponse struct {
PersonView PersonViewSafe `json:"person_view" url:"person_view,omitempty"`
Banned bool `json:"banned" url:"banned,omitempty"`
LemmyResponse
}
type AddModToCommunity struct {
CommunityID int `json:"community_id" url:"community_id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
Added bool `json:"added" url:"added,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type AddModToCommunityResponse struct {
Moderators []CommunityModeratorView `json:"moderators" url:"moderators,omitempty"`
LemmyResponse
}
type EditCommunity struct {
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Title Optional[string] `json:"title" url:"title,omitempty"`
Description Optional[string] `json:"description" url:"description,omitempty"`
Icon Optional[string] `json:"icon" url:"icon,omitempty"`
Banner Optional[string] `json:"banner" url:"banner,omitempty"`
NSFW Optional[bool] `json:"nsfw" url:"nsfw,omitempty"`
PostingRestrictedToMods Optional[bool] `json:"posting_restricted_to_mods" url:"posting_restricted_to_mods,omitempty"`
DiscussionLanguages Optional[[]int] `json:"discussion_languages" url:"discussion_languages,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type HideCommunity struct {
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Hidden bool `json:"hidden" url:"hidden,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type DeleteCommunity struct {
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Deleted bool `json:"deleted" url:"deleted,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type RemoveCommunity struct {
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Removed bool `json:"removed" url:"removed,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Expires Optional[int64] `json:"expires" url:"expires,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type FollowCommunity struct {
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Follow bool `json:"follow" url:"follow,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type BlockCommunity struct {
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Block bool `json:"block" url:"block,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type BlockCommunityResponse struct {
CommunityView CommunityView `json:"community_view" url:"community_view,omitempty"`
Blocked bool `json:"blocked" url:"blocked,omitempty"`
LemmyResponse
}
type TransferCommunity struct {
CommunityID int `json:"community_id" url:"community_id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}

View File

@@ -1,131 +0,0 @@
package types
type GetCommunity struct {
ID Optional[int] `json:"id,omitempty" url:"id,omitempty"`
Name Optional[string] `json:"name,omitempty" url:"name,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type GetCommunityResponse struct {
CommunityView CommunityView `json:"community_view,omitempty" url:"community_view,omitempty"`
Site Optional[Site] `json:"site,omitempty" url:"site,omitempty"`
Moderators []CommunityModeratorView `json:"moderators,omitempty" url:"moderators,omitempty"`
Online uint `json:"online,omitempty" url:"online,omitempty"`
DiscussionLanguages []int `json:"discussion_languages,omitempty" url:"discussion_languages,omitempty"`
DefaultPostLanguage Optional[int] `json:"default_post_language,omitempty" url:"default_post_language,omitempty"`
LemmyResponse
}
type CreateCommunity struct {
Name string `json:"name,omitempty" url:"name,omitempty"`
Title string `json:"title,omitempty" url:"title,omitempty"`
Description Optional[string] `json:"description,omitempty" url:"description,omitempty"`
Icon Optional[string] `json:"icon,omitempty" url:"icon,omitempty"`
Banner Optional[string] `json:"banner,omitempty" url:"banner,omitempty"`
NSFW Optional[bool] `json:"nsfw,omitempty" url:"nsfw,omitempty"`
PostingRestrictedToMods Optional[bool] `json:"posting_restricted_to_mods,omitempty" url:"posting_restricted_to_mods,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type CommunityResponse struct {
CommunityView CommunityView `json:"community_view,omitempty" url:"community_view,omitempty"`
LemmyResponse
}
type ListCommunities struct {
Type Optional[ListingType] `json:"type,omitempty" url:"type,omitempty"`
Sort Optional[SortType] `json:"sort,omitempty" url:"sort,omitempty"`
Page Optional[int64] `json:"page,omitempty" url:"page,omitempty"`
Limit Optional[int64] `json:"limit,omitempty" url:"limit,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type ListCommunitiesResponse struct {
Communities []CommunityView `json:"communities,omitempty" url:"communities,omitempty"`
LemmyResponse
}
type BanFromCommunity struct {
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
PersonID int `json:"person_id,omitempty" url:"person_id,omitempty"`
Ban bool `json:"ban,omitempty" url:"ban,omitempty"`
RemoveData Optional[bool] `json:"remove_data,omitempty" url:"remove_data,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
Expires Optional[int64] `json:"expires,omitempty" url:"expires,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type BanFromCommunityResponse struct {
PersonView PersonViewSafe `json:"person_view,omitempty" url:"person_view,omitempty"`
Banned bool `json:"banned,omitempty" url:"banned,omitempty"`
LemmyResponse
}
type AddModToCommunity struct {
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
PersonID int `json:"person_id,omitempty" url:"person_id,omitempty"`
Added bool `json:"added,omitempty" url:"added,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type AddModToCommunityResponse struct {
Moderators []CommunityModeratorView `json:"moderators,omitempty" url:"moderators,omitempty"`
LemmyResponse
}
type EditCommunity struct {
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
Title Optional[string] `json:"title,omitempty" url:"title,omitempty"`
Description Optional[string] `json:"description,omitempty" url:"description,omitempty"`
Icon Optional[string] `json:"icon,omitempty" url:"icon,omitempty"`
Banner Optional[string] `json:"banner,omitempty" url:"banner,omitempty"`
NSFW Optional[bool] `json:"nsfw,omitempty" url:"nsfw,omitempty"`
PostingRestrictedToMods Optional[bool] `json:"posting_restricted_to_mods,omitempty" url:"posting_restricted_to_mods,omitempty"`
DiscussionLanguages Optional[[]int] `json:"discussion_languages,omitempty" url:"discussion_languages,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type HideCommunity struct {
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
Hidden bool `json:"hidden,omitempty" url:"hidden,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type DeleteCommunity struct {
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
Deleted bool `json:"deleted,omitempty" url:"deleted,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type RemoveCommunity struct {
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
Removed bool `json:"removed,omitempty" url:"removed,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
Expires Optional[int64] `json:"expires,omitempty" url:"expires,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type FollowCommunity struct {
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
Follow bool `json:"follow,omitempty" url:"follow,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type BlockCommunity struct {
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
Block bool `json:"block,omitempty" url:"block,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type BlockCommunityResponse struct {
CommunityView CommunityView `json:"community_view,omitempty" url:"community_view,omitempty"`
Blocked bool `json:"blocked,omitempty" url:"blocked,omitempty"`
LemmyResponse
}
type TransferCommunity struct {
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
PersonID int `json:"person_id,omitempty" url:"person_id,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}

View File

@@ -0,0 +1,15 @@
// Source: lemmy/crates/db_schema/src/source/community_block.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type CommunityBlock struct {
ID int `json:"id" url:"id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
}
type CommunityBlockForm struct {
PersonID int `json:"person_id" url:"person_id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
}

View File

@@ -0,0 +1,17 @@
// Source: lemmy/crates/db_schema/src/source/email_verification.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type EmailVerification struct {
ID int32 `json:"id" url:"id,omitempty"`
LocalUserID int `json:"local_user_id" url:"local_user_id,omitempty"`
Email string `json:"email" url:"email,omitempty"`
VerificationCode string `json:"verification_code" url:"verification_code,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
}
type EmailVerificationForm struct {
LocalUserID int `json:"local_user_id" url:"local_user_id,omitempty"`
Email string `json:"email" url:"email,omitempty"`
VerificationToken string `json:"verification_token" url:"verification_token,omitempty"`
}

View File

@@ -0,0 +1,15 @@
// Source: lemmy/crates/db_schema/src/source/federation_allowlist.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type FederationAllowList struct {
ID int32 `json:"id" url:"id,omitempty"`
InstanceID int `json:"instance_id" url:"instance_id,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
}
type FederationAllowListForm struct {
InstanceID int `json:"instance_id" url:"instance_id,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
}

View File

@@ -0,0 +1,15 @@
// Source: lemmy/crates/db_schema/src/source/federation_blocklist.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type FederationBlockList struct {
ID int32 `json:"id" url:"id,omitempty"`
InstanceID int `json:"instance_id" url:"instance_id,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
}
type FederationBlockListForm struct {
InstanceID int `json:"instance_id" url:"instance_id,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
}

4
types/handlers.gen.go Normal file
View File

@@ -0,0 +1,4 @@
// Source: lemmy/crates/api_common/src/websocket/handlers.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types

15
types/instance.gen.go Normal file
View File

@@ -0,0 +1,15 @@
// Source: lemmy/crates/db_schema/src/source/instance.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type Instance struct {
ID int `json:"id" url:"id,omitempty"`
Domain string `json:"domain" url:"domain,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
}
type InstanceForm struct {
Domain string `json:"domain" url:"domain,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
}

10
types/language.gen.go Normal file
View File

@@ -0,0 +1,10 @@
// Source: lemmy/crates/db_schema/src/source/language.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type Language struct {
ID int `json:"id" url:"id,omitempty"`
Code string `json:"code" url:"code,omitempty"`
Name string `json:"name" url:"name,omitempty"`
}

84
types/lib.1.gen.go Normal file
View File

@@ -0,0 +1,84 @@
// Source: lemmy/crates/db_schema/src/lib.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type SortType string
const (
SortTypeActive SortType = "Active"
SortTypeHot SortType = "Hot"
SortTypeNew SortType = "New"
SortTypeOld SortType = "Old"
SortTypeTopDay SortType = "TopDay"
SortTypeTopWeek SortType = "TopWeek"
SortTypeTopMonth SortType = "TopMonth"
SortTypeTopYear SortType = "TopYear"
SortTypeTopAll SortType = "TopAll"
SortTypeMostComments SortType = "MostComments"
SortTypeNewComments SortType = "NewComments"
)
type CommentSortType string
const (
CommentSortTypeHot CommentSortType = "Hot"
CommentSortTypeTop CommentSortType = "Top"
CommentSortTypeNew CommentSortType = "New"
CommentSortTypeOld CommentSortType = "Old"
)
type ListingType string
const (
ListingTypeAll ListingType = "All"
ListingTypeLocal ListingType = "Local"
ListingTypeSubscribed ListingType = "Subscribed"
)
type SearchType string
const (
SearchTypeAll SearchType = "All"
SearchTypeComments SearchType = "Comments"
SearchTypePosts SearchType = "Posts"
SearchTypeCommunities SearchType = "Communities"
SearchTypeUsers SearchType = "Users"
SearchTypeUrl SearchType = "Url"
)
type SubscribedType string
const (
SubscribedTypeSubscribed SubscribedType = "Subscribed"
SubscribedTypeNotSubscribed SubscribedType = "NotSubscribed"
SubscribedTypePending SubscribedType = "Pending"
)
type ModlogActionType string
const (
ModlogActionTypeAll ModlogActionType = "All"
ModlogActionTypeModRemovePost ModlogActionType = "ModRemovePost"
ModlogActionTypeModLockPost ModlogActionType = "ModLockPost"
ModlogActionTypeModFeaturePost ModlogActionType = "ModFeaturePost"
ModlogActionTypeModRemoveComment ModlogActionType = "ModRemoveComment"
ModlogActionTypeModRemoveCommunity ModlogActionType = "ModRemoveCommunity"
ModlogActionTypeModBanFromCommunity ModlogActionType = "ModBanFromCommunity"
ModlogActionTypeModAddCommunity ModlogActionType = "ModAddCommunity"
ModlogActionTypeModTransferCommunity ModlogActionType = "ModTransferCommunity"
ModlogActionTypeModAdd ModlogActionType = "ModAdd"
ModlogActionTypeModBan ModlogActionType = "ModBan"
ModlogActionTypeModHideCommunity ModlogActionType = "ModHideCommunity"
ModlogActionTypeAdminPurgePerson ModlogActionType = "AdminPurgePerson"
ModlogActionTypeAdminPurgeCommunity ModlogActionType = "AdminPurgeCommunity"
ModlogActionTypeAdminPurgePost ModlogActionType = "AdminPurgePost"
ModlogActionTypeAdminPurgeComment ModlogActionType = "AdminPurgeComment"
)
type PostFeatureType string
const (
PostFeatureTypeLocal PostFeatureType = "Local"
PostFeatureTypeCommunity PostFeatureType = "Community"
)

4
types/lib.gen.go Normal file
View File

@@ -0,0 +1,4 @@
// Source: lemmy/crates/api_common/src/lib.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types

84
types/local_site.gen.go Normal file
View File

@@ -0,0 +1,84 @@
// Source: lemmy/crates/db_schema/src/source/local_site.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type LocalSite struct {
ID int `json:"id" url:"id,omitempty"`
SiteID int `json:"site_id" url:"site_id,omitempty"`
SiteSetup bool `json:"site_setup" url:"site_setup,omitempty"`
EnableDownvotes bool `json:"enable_downvotes" url:"enable_downvotes,omitempty"`
EnableNSFW bool `json:"enable_nsfw" url:"enable_nsfw,omitempty"`
CommunityCreationAdminOnly bool `json:"community_creation_admin_only" url:"community_creation_admin_only,omitempty"`
RequireEmailVerification bool `json:"require_email_verification" url:"require_email_verification,omitempty"`
ApplicationQuestion Optional[string] `json:"application_question" url:"application_question,omitempty"`
PrivateInstance bool `json:"private_instance" url:"private_instance,omitempty"`
DefaultTheme string `json:"default_theme" url:"default_theme,omitempty"`
DefaultPostListingType string `json:"default_post_listing_type" url:"default_post_listing_type,omitempty"`
LegalInformation Optional[string] `json:"legal_information" url:"legal_information,omitempty"`
HideModlogModNames bool `json:"hide_modlog_mod_names" url:"hide_modlog_mod_names,omitempty"`
ApplicationEmailAdmins bool `json:"application_email_admins" url:"application_email_admins,omitempty"`
SlurFilterRegex Optional[string] `json:"slur_filter_regex" url:"slur_filter_regex,omitempty"`
ActorNameMaxLength int32 `json:"actor_name_max_length" url:"actor_name_max_length,omitempty"`
FederationEnabled bool `json:"federation_enabled" url:"federation_enabled,omitempty"`
FederationDebug bool `json:"federation_debug" url:"federation_debug,omitempty"`
FederationWorkerCount int32 `json:"federation_worker_count" url:"federation_worker_count,omitempty"`
CaptchaEnabled bool `json:"captcha_enabled" url:"captcha_enabled,omitempty"`
CaptchaDifficulty string `json:"captcha_difficulty" url:"captcha_difficulty,omitempty"`
RegistrationMode RegistrationMode `json:"registration_mode" url:"registration_mode,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
}
type LocalSiteInsertForm struct {
SiteID int `json:"site_id" url:"site_id,omitempty"`
SiteSetup Optional[bool] `json:"site_setup" url:"site_setup,omitempty"`
EnableDownvotes Optional[bool] `json:"enable_downvotes" url:"enable_downvotes,omitempty"`
EnableNSFW Optional[bool] `json:"enable_nsfw" url:"enable_nsfw,omitempty"`
CommunityCreationAdminOnly Optional[bool] `json:"community_creation_admin_only" url:"community_creation_admin_only,omitempty"`
RequireEmailVerification Optional[bool] `json:"require_email_verification" url:"require_email_verification,omitempty"`
ApplicationQuestion Optional[string] `json:"application_question" url:"application_question,omitempty"`
PrivateInstance Optional[bool] `json:"private_instance" url:"private_instance,omitempty"`
DefaultTheme Optional[string] `json:"default_theme" url:"default_theme,omitempty"`
DefaultPostListingType Optional[string] `json:"default_post_listing_type" url:"default_post_listing_type,omitempty"`
LegalInformation Optional[string] `json:"legal_information" url:"legal_information,omitempty"`
HideModlogModNames Optional[bool] `json:"hide_modlog_mod_names" url:"hide_modlog_mod_names,omitempty"`
ApplicationEmailAdmins Optional[bool] `json:"application_email_admins" url:"application_email_admins,omitempty"`
SlurFilterRegex Optional[string] `json:"slur_filter_regex" url:"slur_filter_regex,omitempty"`
ActorNameMaxLength Optional[int32] `json:"actor_name_max_length" url:"actor_name_max_length,omitempty"`
FederationEnabled Optional[bool] `json:"federation_enabled" url:"federation_enabled,omitempty"`
FederationDebug Optional[bool] `json:"federation_debug" url:"federation_debug,omitempty"`
FederationWorkerCount Optional[int32] `json:"federation_worker_count" url:"federation_worker_count,omitempty"`
CaptchaEnabled Optional[bool] `json:"captcha_enabled" url:"captcha_enabled,omitempty"`
CaptchaDifficulty Optional[string] `json:"captcha_difficulty" url:"captcha_difficulty,omitempty"`
RegistrationMode Optional[RegistrationMode] `json:"registration_mode" url:"registration_mode,omitempty"`
}
type LocalSiteUpdateForm struct {
SiteSetup Optional[bool] `json:"site_setup" url:"site_setup,omitempty"`
EnableDownvotes Optional[bool] `json:"enable_downvotes" url:"enable_downvotes,omitempty"`
EnableNSFW Optional[bool] `json:"enable_nsfw" url:"enable_nsfw,omitempty"`
CommunityCreationAdminOnly Optional[bool] `json:"community_creation_admin_only" url:"community_creation_admin_only,omitempty"`
RequireEmailVerification Optional[bool] `json:"require_email_verification" url:"require_email_verification,omitempty"`
ApplicationQuestion Optional[Optional[string]] `json:"application_question" url:"application_question,omitempty"`
PrivateInstance Optional[bool] `json:"private_instance" url:"private_instance,omitempty"`
DefaultTheme Optional[string] `json:"default_theme" url:"default_theme,omitempty"`
DefaultPostListingType Optional[string] `json:"default_post_listing_type" url:"default_post_listing_type,omitempty"`
LegalInformation Optional[Optional[string]] `json:"legal_information" url:"legal_information,omitempty"`
HideModlogModNames Optional[bool] `json:"hide_modlog_mod_names" url:"hide_modlog_mod_names,omitempty"`
ApplicationEmailAdmins Optional[bool] `json:"application_email_admins" url:"application_email_admins,omitempty"`
SlurFilterRegex Optional[Optional[string]] `json:"slur_filter_regex" url:"slur_filter_regex,omitempty"`
ActorNameMaxLength Optional[int32] `json:"actor_name_max_length" url:"actor_name_max_length,omitempty"`
FederationEnabled Optional[bool] `json:"federation_enabled" url:"federation_enabled,omitempty"`
FederationDebug Optional[bool] `json:"federation_debug" url:"federation_debug,omitempty"`
FederationWorkerCount Optional[int32] `json:"federation_worker_count" url:"federation_worker_count,omitempty"`
CaptchaEnabled Optional[bool] `json:"captcha_enabled" url:"captcha_enabled,omitempty"`
CaptchaDifficulty Optional[string] `json:"captcha_difficulty" url:"captcha_difficulty,omitempty"`
RegistrationMode Optional[RegistrationMode] `json:"registration_mode" url:"registration_mode,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
}
type RegistrationMode string
const (
RegistrationModeClosed RegistrationMode = "Closed"
RegistrationModeRequireApplication RegistrationMode = "RequireApplication"
RegistrationModeOpen RegistrationMode = "Open"
)

View File

@@ -0,0 +1,53 @@
// Source: lemmy/crates/db_schema/src/source/local_site_rate_limit.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type LocalSiteRateLimit struct {
ID int32 `json:"id" url:"id,omitempty"`
LocalSiteID int `json:"local_site_id" url:"local_site_id,omitempty"`
Message int32 `json:"message" url:"message,omitempty"`
MessagePerSecond int32 `json:"message_per_second" url:"message_per_second,omitempty"`
Post int32 `json:"post" url:"post,omitempty"`
PostPerSecond int32 `json:"post_per_second" url:"post_per_second,omitempty"`
Register int32 `json:"register" url:"register,omitempty"`
RegisterPerSecond int32 `json:"register_per_second" url:"register_per_second,omitempty"`
Image int32 `json:"image" url:"image,omitempty"`
ImagePerSecond int32 `json:"image_per_second" url:"image_per_second,omitempty"`
Comment int32 `json:"comment" url:"comment,omitempty"`
CommentPerSecond int32 `json:"comment_per_second" url:"comment_per_second,omitempty"`
Search int32 `json:"search" url:"search,omitempty"`
SearchPerSecond int32 `json:"search_per_second" url:"search_per_second,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
}
type LocalSiteRateLimitInsertForm struct {
LocalSiteID int `json:"local_site_id" url:"local_site_id,omitempty"`
Message Optional[int32] `json:"message" url:"message,omitempty"`
MessagePerSecond Optional[int32] `json:"message_per_second" url:"message_per_second,omitempty"`
Post Optional[int32] `json:"post" url:"post,omitempty"`
PostPerSecond Optional[int32] `json:"post_per_second" url:"post_per_second,omitempty"`
Register Optional[int32] `json:"register" url:"register,omitempty"`
RegisterPerSecond Optional[int32] `json:"register_per_second" url:"register_per_second,omitempty"`
Image Optional[int32] `json:"image" url:"image,omitempty"`
ImagePerSecond Optional[int32] `json:"image_per_second" url:"image_per_second,omitempty"`
Comment Optional[int32] `json:"comment" url:"comment,omitempty"`
CommentPerSecond Optional[int32] `json:"comment_per_second" url:"comment_per_second,omitempty"`
Search Optional[int32] `json:"search" url:"search,omitempty"`
SearchPerSecond Optional[int32] `json:"search_per_second" url:"search_per_second,omitempty"`
}
type LocalSiteRateLimitUpdateForm struct {
Message Optional[int32] `json:"message" url:"message,omitempty"`
MessagePerSecond Optional[int32] `json:"message_per_second" url:"message_per_second,omitempty"`
Post Optional[int32] `json:"post" url:"post,omitempty"`
PostPerSecond Optional[int32] `json:"post_per_second" url:"post_per_second,omitempty"`
Register Optional[int32] `json:"register" url:"register,omitempty"`
RegisterPerSecond Optional[int32] `json:"register_per_second" url:"register_per_second,omitempty"`
Image Optional[int32] `json:"image" url:"image,omitempty"`
ImagePerSecond Optional[int32] `json:"image_per_second" url:"image_per_second,omitempty"`
Comment Optional[int32] `json:"comment" url:"comment,omitempty"`
CommentPerSecond Optional[int32] `json:"comment_per_second" url:"comment_per_second,omitempty"`
Search Optional[int32] `json:"search" url:"search,omitempty"`
SearchPerSecond Optional[int32] `json:"search_per_second" url:"search_per_second,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
}

79
types/local_user.gen.go Normal file
View File

@@ -0,0 +1,79 @@
// Source: lemmy/crates/db_schema/src/source/local_user.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type LocalUser struct {
ID int `json:"id" url:"id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
PasswordEncrypted string `json:"password_encrypted" url:"password_encrypted,omitempty"`
Email Optional[string] `json:"email" url:"email,omitempty"`
ShowNSFW bool `json:"show_nsfw" url:"show_nsfw,omitempty"`
Theme string `json:"theme" url:"theme,omitempty"`
DefaultSortType int16 `json:"default_sort_type" url:"default_sort_type,omitempty"`
DefaultListingType int16 `json:"default_listing_type" url:"default_listing_type,omitempty"`
InterfaceLanguage string `json:"interface_language" url:"interface_language,omitempty"`
ShowAvatars bool `json:"show_avatars" url:"show_avatars,omitempty"`
SendNotificationsToEmail bool `json:"send_notifications_to_email" url:"send_notifications_to_email,omitempty"`
ValidatorTime LemmyTime `json:"validator_time" url:"validator_time,omitempty"`
ShowBotAccounts bool `json:"show_bot_accounts" url:"show_bot_accounts,omitempty"`
ShowScores bool `json:"show_scores" url:"show_scores,omitempty"`
ShowReadPosts bool `json:"show_read_posts" url:"show_read_posts,omitempty"`
ShowNewPostNotifs bool `json:"show_new_post_notifs" url:"show_new_post_notifs,omitempty"`
EmailVerified bool `json:"email_verified" url:"email_verified,omitempty"`
AcceptedApplication bool `json:"accepted_application" url:"accepted_application,omitempty"`
}
type LocalUserSettings struct {
ID int `json:"id" url:"id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
Email Optional[string] `json:"email" url:"email,omitempty"`
ShowNSFW bool `json:"show_nsfw" url:"show_nsfw,omitempty"`
Theme string `json:"theme" url:"theme,omitempty"`
DefaultSortType int16 `json:"default_sort_type" url:"default_sort_type,omitempty"`
DefaultListingType int16 `json:"default_listing_type" url:"default_listing_type,omitempty"`
InterfaceLanguage string `json:"interface_language" url:"interface_language,omitempty"`
ShowAvatars bool `json:"show_avatars" url:"show_avatars,omitempty"`
SendNotificationsToEmail bool `json:"send_notifications_to_email" url:"send_notifications_to_email,omitempty"`
ValidatorTime LemmyTime `json:"validator_time" url:"validator_time,omitempty"`
ShowBotAccounts bool `json:"show_bot_accounts" url:"show_bot_accounts,omitempty"`
ShowScores bool `json:"show_scores" url:"show_scores,omitempty"`
ShowReadPosts bool `json:"show_read_posts" url:"show_read_posts,omitempty"`
ShowNewPostNotifs bool `json:"show_new_post_notifs" url:"show_new_post_notifs,omitempty"`
EmailVerified bool `json:"email_verified" url:"email_verified,omitempty"`
AcceptedApplication bool `json:"accepted_application" url:"accepted_application,omitempty"`
}
type LocalUserInsertForm struct {
PersonID int `json:"person_id" url:"person_id,omitempty"`
PasswordEncrypted string `json:"password_encrypted" url:"password_encrypted,omitempty"`
Email Optional[string] `json:"email" url:"email,omitempty"`
ShowNSFW Optional[bool] `json:"show_nsfw" url:"show_nsfw,omitempty"`
Theme Optional[string] `json:"theme" url:"theme,omitempty"`
DefaultSortType Optional[int16] `json:"default_sort_type" url:"default_sort_type,omitempty"`
DefaultListingType Optional[int16] `json:"default_listing_type" url:"default_listing_type,omitempty"`
InterfaceLanguage Optional[string] `json:"interface_language" url:"interface_language,omitempty"`
ShowAvatars Optional[bool] `json:"show_avatars" url:"show_avatars,omitempty"`
SendNotificationsToEmail Optional[bool] `json:"send_notifications_to_email" url:"send_notifications_to_email,omitempty"`
ShowBotAccounts Optional[bool] `json:"show_bot_accounts" url:"show_bot_accounts,omitempty"`
ShowScores Optional[bool] `json:"show_scores" url:"show_scores,omitempty"`
ShowReadPosts Optional[bool] `json:"show_read_posts" url:"show_read_posts,omitempty"`
ShowNewPostNotifs Optional[bool] `json:"show_new_post_notifs" url:"show_new_post_notifs,omitempty"`
EmailVerified Optional[bool] `json:"email_verified" url:"email_verified,omitempty"`
AcceptedApplication Optional[bool] `json:"accepted_application" url:"accepted_application,omitempty"`
}
type LocalUserUpdateForm struct {
PasswordEncrypted Optional[string] `json:"password_encrypted" url:"password_encrypted,omitempty"`
Email Optional[Optional[string]] `json:"email" url:"email,omitempty"`
ShowNSFW Optional[bool] `json:"show_nsfw" url:"show_nsfw,omitempty"`
Theme Optional[string] `json:"theme" url:"theme,omitempty"`
DefaultSortType Optional[int16] `json:"default_sort_type" url:"default_sort_type,omitempty"`
DefaultListingType Optional[int16] `json:"default_listing_type" url:"default_listing_type,omitempty"`
InterfaceLanguage Optional[string] `json:"interface_language" url:"interface_language,omitempty"`
ShowAvatars Optional[bool] `json:"show_avatars" url:"show_avatars,omitempty"`
SendNotificationsToEmail Optional[bool] `json:"send_notifications_to_email" url:"send_notifications_to_email,omitempty"`
ShowBotAccounts Optional[bool] `json:"show_bot_accounts" url:"show_bot_accounts,omitempty"`
ShowScores Optional[bool] `json:"show_scores" url:"show_scores,omitempty"`
ShowReadPosts Optional[bool] `json:"show_read_posts" url:"show_read_posts,omitempty"`
ShowNewPostNotifs Optional[bool] `json:"show_new_post_notifs" url:"show_new_post_notifs,omitempty"`
EmailVerified Optional[bool] `json:"email_verified" url:"email_verified,omitempty"`
AcceptedApplication Optional[bool] `json:"accepted_application" url:"accepted_application,omitempty"`
}

4
types/mod.1.gen.go Normal file
View File

@@ -0,0 +1,4 @@
// Source: lemmy/crates/db_schema/src/source/mod.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types

103
types/mod.gen.go Normal file
View File

@@ -0,0 +1,103 @@
// Source: lemmy/crates/api_common/src/websocket/mod.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type UserOperation string
const (
UserOperationLogin UserOperation = "Login"
UserOperationGetCaptcha UserOperation = "GetCaptcha"
UserOperationSaveComment UserOperation = "SaveComment"
UserOperationCreateCommentLike UserOperation = "CreateCommentLike"
UserOperationCreateCommentReport UserOperation = "CreateCommentReport"
UserOperationResolveCommentReport UserOperation = "ResolveCommentReport"
UserOperationListCommentReports UserOperation = "ListCommentReports"
UserOperationCreatePostLike UserOperation = "CreatePostLike"
UserOperationLockPost UserOperation = "LockPost"
UserOperationFeaturePost UserOperation = "FeaturePost"
UserOperationMarkPostAsRead UserOperation = "MarkPostAsRead"
UserOperationSavePost UserOperation = "SavePost"
UserOperationCreatePostReport UserOperation = "CreatePostReport"
UserOperationResolvePostReport UserOperation = "ResolvePostReport"
UserOperationListPostReports UserOperation = "ListPostReports"
UserOperationGetReportCount UserOperation = "GetReportCount"
UserOperationGetUnreadCount UserOperation = "GetUnreadCount"
UserOperationVerifyEmail UserOperation = "VerifyEmail"
UserOperationFollowCommunity UserOperation = "FollowCommunity"
UserOperationGetReplies UserOperation = "GetReplies"
UserOperationGetPersonMentions UserOperation = "GetPersonMentions"
UserOperationMarkPersonMentionAsRead UserOperation = "MarkPersonMentionAsRead"
UserOperationMarkCommentReplyAsRead UserOperation = "MarkCommentReplyAsRead"
UserOperationGetModlog UserOperation = "GetModlog"
UserOperationBanFromCommunity UserOperation = "BanFromCommunity"
UserOperationAddModToCommunity UserOperation = "AddModToCommunity"
UserOperationAddAdmin UserOperation = "AddAdmin"
UserOperationGetUnreadRegistrationApplicationCount UserOperation = "GetUnreadRegistrationApplicationCount"
UserOperationListRegistrationApplications UserOperation = "ListRegistrationApplications"
UserOperationApproveRegistrationApplication UserOperation = "ApproveRegistrationApplication"
UserOperationBanPerson UserOperation = "BanPerson"
UserOperationGetBannedPersons UserOperation = "GetBannedPersons"
UserOperationMarkAllAsRead UserOperation = "MarkAllAsRead"
UserOperationSaveUserSettings UserOperation = "SaveUserSettings"
UserOperationTransferCommunity UserOperation = "TransferCommunity"
UserOperationLeaveAdmin UserOperation = "LeaveAdmin"
UserOperationPasswordReset UserOperation = "PasswordReset"
UserOperationPasswordChange UserOperation = "PasswordChange"
UserOperationMarkPrivateMessageAsRead UserOperation = "MarkPrivateMessageAsRead"
UserOperationCreatePrivateMessageReport UserOperation = "CreatePrivateMessageReport"
UserOperationResolvePrivateMessageReport UserOperation = "ResolvePrivateMessageReport"
UserOperationListPrivateMessageReports UserOperation = "ListPrivateMessageReports"
UserOperationUserJoin UserOperation = "UserJoin"
UserOperationPostJoin UserOperation = "PostJoin"
UserOperationCommunityJoin UserOperation = "CommunityJoin"
UserOperationModJoin UserOperation = "ModJoin"
UserOperationChangePassword UserOperation = "ChangePassword"
UserOperationGetSiteMetadata UserOperation = "GetSiteMetadata"
UserOperationBlockCommunity UserOperation = "BlockCommunity"
UserOperationBlockPerson UserOperation = "BlockPerson"
UserOperationPurgePerson UserOperation = "PurgePerson"
UserOperationPurgeCommunity UserOperation = "PurgeCommunity"
UserOperationPurgePost UserOperation = "PurgePost"
UserOperationPurgeComment UserOperation = "PurgeComment"
)
type UserOperationCRUD string
const (
UserOperationCRUDCreateSite UserOperationCRUD = "CreateSite"
UserOperationCRUDGetSite UserOperationCRUD = "GetSite"
UserOperationCRUDEditSite UserOperationCRUD = "EditSite"
UserOperationCRUDCreateCommunity UserOperationCRUD = "CreateCommunity"
UserOperationCRUDListCommunities UserOperationCRUD = "ListCommunities"
UserOperationCRUDEditCommunity UserOperationCRUD = "EditCommunity"
UserOperationCRUDDeleteCommunity UserOperationCRUD = "DeleteCommunity"
UserOperationCRUDRemoveCommunity UserOperationCRUD = "RemoveCommunity"
UserOperationCRUDCreatePost UserOperationCRUD = "CreatePost"
UserOperationCRUDGetPost UserOperationCRUD = "GetPost"
UserOperationCRUDEditPost UserOperationCRUD = "EditPost"
UserOperationCRUDDeletePost UserOperationCRUD = "DeletePost"
UserOperationCRUDRemovePost UserOperationCRUD = "RemovePost"
UserOperationCRUDCreateComment UserOperationCRUD = "CreateComment"
UserOperationCRUDGetComment UserOperationCRUD = "GetComment"
UserOperationCRUDEditComment UserOperationCRUD = "EditComment"
UserOperationCRUDDeleteComment UserOperationCRUD = "DeleteComment"
UserOperationCRUDRemoveComment UserOperationCRUD = "RemoveComment"
UserOperationCRUDRegister UserOperationCRUD = "Register"
UserOperationCRUDDeleteAccount UserOperationCRUD = "DeleteAccount"
UserOperationCRUDCreatePrivateMessage UserOperationCRUD = "CreatePrivateMessage"
UserOperationCRUDGetPrivateMessages UserOperationCRUD = "GetPrivateMessages"
UserOperationCRUDEditPrivateMessage UserOperationCRUD = "EditPrivateMessage"
UserOperationCRUDDeletePrivateMessage UserOperationCRUD = "DeletePrivateMessage"
)
type UserOperationApub string
const (
UserOperationApubGetPosts UserOperationApub = "GetPosts"
UserOperationApubGetCommunity UserOperationApub = "GetCommunity"
UserOperationApubGetComments UserOperationApub = "GetComments"
UserOperationApubGetPersonDetails UserOperationApub = "GetPersonDetails"
UserOperationApubSearch UserOperationApub = "Search"
UserOperationApubResolveObject UserOperationApub = "ResolveObject"
)

207
types/moderator.gen.go Normal file
View File

@@ -0,0 +1,207 @@
// Source: lemmy/crates/db_schema/src/source/moderator.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type ModRemovePost struct {
ID int32 `json:"id" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Removed Optional[bool] `json:"removed" url:"removed,omitempty"`
When LemmyTime `json:"when_" url:"when_,omitempty"`
}
type ModRemovePostForm struct {
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Removed Optional[bool] `json:"removed" url:"removed,omitempty"`
}
type ModLockPost struct {
ID int32 `json:"id" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
Locked Optional[bool] `json:"locked" url:"locked,omitempty"`
When LemmyTime `json:"when_" url:"when_,omitempty"`
}
type ModLockPostForm struct {
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
Locked Optional[bool] `json:"locked" url:"locked,omitempty"`
}
type ModFeaturePost struct {
ID int32 `json:"id" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
Featured bool `json:"featured" url:"featured,omitempty"`
When LemmyTime `json:"when_" url:"when_,omitempty"`
IsFeaturedCommunity bool `json:"is_featured_community" url:"is_featured_community,omitempty"`
}
type ModFeaturePostForm struct {
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
Featured bool `json:"featured" url:"featured,omitempty"`
IsFeaturedCommunity bool `json:"is_featured_community" url:"is_featured_community,omitempty"`
}
type ModRemoveComment struct {
ID int32 `json:"id" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Removed Optional[bool] `json:"removed" url:"removed,omitempty"`
When LemmyTime `json:"when_" url:"when_,omitempty"`
}
type ModRemoveCommentForm struct {
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Removed Optional[bool] `json:"removed" url:"removed,omitempty"`
}
type ModRemoveCommunity struct {
ID int32 `json:"id" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Removed Optional[bool] `json:"removed" url:"removed,omitempty"`
Expires LemmyTime `json:"expires" url:"expires,omitempty"`
When LemmyTime `json:"when_" url:"when_,omitempty"`
}
type ModRemoveCommunityForm struct {
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Removed Optional[bool] `json:"removed" url:"removed,omitempty"`
Expires LemmyTime `json:"expires" url:"expires,omitempty"`
}
type ModBanFromCommunity struct {
ID int32 `json:"id" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
OtherPersonID int `json:"other_person_id" url:"other_person_id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Banned Optional[bool] `json:"banned" url:"banned,omitempty"`
Expires LemmyTime `json:"expires" url:"expires,omitempty"`
When LemmyTime `json:"when_" url:"when_,omitempty"`
}
type ModBanFromCommunityForm struct {
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
OtherPersonID int `json:"other_person_id" url:"other_person_id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Banned Optional[bool] `json:"banned" url:"banned,omitempty"`
Expires LemmyTime `json:"expires" url:"expires,omitempty"`
}
type ModBan struct {
ID int32 `json:"id" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
OtherPersonID int `json:"other_person_id" url:"other_person_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Banned Optional[bool] `json:"banned" url:"banned,omitempty"`
Expires LemmyTime `json:"expires" url:"expires,omitempty"`
When LemmyTime `json:"when_" url:"when_,omitempty"`
}
type ModHideCommunityForm struct {
CommunityID int `json:"community_id" url:"community_id,omitempty"`
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
Hidden Optional[bool] `json:"hidden" url:"hidden,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
}
type ModHideCommunity struct {
ID int32 `json:"id" url:"id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Hidden Optional[bool] `json:"hidden" url:"hidden,omitempty"`
When LemmyTime `json:"when_" url:"when_,omitempty"`
}
type ModBanForm struct {
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
OtherPersonID int `json:"other_person_id" url:"other_person_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Banned Optional[bool] `json:"banned" url:"banned,omitempty"`
Expires LemmyTime `json:"expires" url:"expires,omitempty"`
}
type ModAddCommunity struct {
ID int32 `json:"id" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
OtherPersonID int `json:"other_person_id" url:"other_person_id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Removed Optional[bool] `json:"removed" url:"removed,omitempty"`
When LemmyTime `json:"when_" url:"when_,omitempty"`
}
type ModAddCommunityForm struct {
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
OtherPersonID int `json:"other_person_id" url:"other_person_id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Removed Optional[bool] `json:"removed" url:"removed,omitempty"`
}
type ModTransferCommunity struct {
ID int32 `json:"id" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
OtherPersonID int `json:"other_person_id" url:"other_person_id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Removed Optional[bool] `json:"removed" url:"removed,omitempty"`
When LemmyTime `json:"when_" url:"when_,omitempty"`
}
type ModTransferCommunityForm struct {
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
OtherPersonID int `json:"other_person_id" url:"other_person_id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Removed Optional[bool] `json:"removed" url:"removed,omitempty"`
}
type ModAdd struct {
ID int32 `json:"id" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
OtherPersonID int `json:"other_person_id" url:"other_person_id,omitempty"`
Removed Optional[bool] `json:"removed" url:"removed,omitempty"`
When LemmyTime `json:"when_" url:"when_,omitempty"`
}
type ModAddForm struct {
ModPersonID int `json:"mod_person_id" url:"mod_person_id,omitempty"`
OtherPersonID int `json:"other_person_id" url:"other_person_id,omitempty"`
Removed Optional[bool] `json:"removed" url:"removed,omitempty"`
}
type AdminPurgePerson struct {
ID int32 `json:"id" url:"id,omitempty"`
AdminPersonID int `json:"admin_person_id" url:"admin_person_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
When LemmyTime `json:"when_" url:"when_,omitempty"`
}
type AdminPurgePersonForm struct {
AdminPersonID int `json:"admin_person_id" url:"admin_person_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
}
type AdminPurgeCommunity struct {
ID int32 `json:"id" url:"id,omitempty"`
AdminPersonID int `json:"admin_person_id" url:"admin_person_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
When LemmyTime `json:"when_" url:"when_,omitempty"`
}
type AdminPurgeCommunityForm struct {
AdminPersonID int `json:"admin_person_id" url:"admin_person_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
}
type AdminPurgePost struct {
ID int32 `json:"id" url:"id,omitempty"`
AdminPersonID int `json:"admin_person_id" url:"admin_person_id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
When LemmyTime `json:"when_" url:"when_,omitempty"`
}
type AdminPurgePostForm struct {
AdminPersonID int `json:"admin_person_id" url:"admin_person_id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
}
type AdminPurgeComment struct {
ID int32 `json:"id" url:"id,omitempty"`
AdminPersonID int `json:"admin_person_id" url:"admin_person_id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
When LemmyTime `json:"when_" url:"when_,omitempty"`
}
type AdminPurgeCommentForm struct {
AdminPersonID int `json:"admin_person_id" url:"admin_person_id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
}

View File

@@ -1,169 +0,0 @@
package types
/*type SiteMetadata struct {
Title Optional[string] `json:"title,omitempty" url:"title,omitempty"`
Description Optional[string] `json:"description,omitempty" url:"description,omitempty"`
Image Optional[string] `json:"image,omitempty" url:"image,omitempty"`
HTML Optional[string] `json:"html,omitempty" url:"html,omitempty"`
}*/
type UserOperation int
const (
LoginOp UserOperation = iota
RegisterOp
GetCaptchaOp
CreateCommunityOp
CreatePostOp
ListCommunitiesOp
GetPostOp
GetCommunityOp
CreateCommentOp
EditCommentOp
DeleteCommentOp
RemoveCommentOp
SaveCommentOp
CreateCommentLikeOp
GetPostsOp
CreatePostLikeOp
EditPostOp
DeletePostOp
RemovePostOp
LockPostOp
StickyPostOp
MarkPostAsReadOp
SavePostOp
EditCommunityOp
DeleteCommunityOp
RemoveCommunityOp
FollowCommunityOp
GetPersonDetailsOp
GetRepliesOp
GetPersonMentionsOp
MarkPersonMentionAsReadOp
MarkCommentReplyAsReadOp
GetModlogOp
BanFromCommunityOp
AddModToCommunityOp
CreateSiteOp
EditSiteOp
GetSiteOp
AddAdminOp
GetUnreadRegistrationApplicationCountOp
ListRegistrationApplicationsOp
ApproveRegistrationApplicationOp
BanPersonOp
GetBannedPersonsOp
SearchOp
ResolveObjectOp
MarkAllAsReadOp
SaveUserSettingsOp
TransferCommunityOp
LeaveAdminOp
DeleteAccountOp
PasswordResetOp
PasswordChangeOp
CreatePrivateMessageOp
EditPrivateMessageOp
DeletePrivateMessageOp
MarkPrivateMessageAsReadOp
CreatePrivateMessageReportOp
ResolvePrivateMessageReportOp
ListPrivateMessageReportsOp
GetPrivateMessagesOp
UserJoinOp
GetCommentsOp
PostJoinOp
CommunityJoinOp
ChangePasswordOp
GetSiteMetadataOp
BlockCommunityOp
BlockPersonOp
PurgePersonOp
PurgeCommunityOp
PurgePostOp
PurgeCommentOp
CreateCommentReportOp
ResolveCommentReportOp
ListCommentReportsOp
CreatePostReportOp
ResolvePostReportOp
ListPostReportsOp
GetReportCountOp
GetUnreadCountOp
VerifyEmailOp
)
type SortType string
const (
Active SortType = "Active"
Hot SortType = "Hot"
New SortType = "New"
Old SortType = "Old"
TopDay SortType = "TopDay"
TopWeek SortType = "TopWeek"
TopMonth SortType = "TopMonth"
TopYear SortType = "TopYear"
TopAll SortType = "TopAll"
MostComments SortType = "MostComments"
NewComments SortType = "NewComments"
)
type CommentSortType string
const (
CommentSortHot CommentSortType = "Hot"
CommentSortTop CommentSortType = "Top"
CommentSortNew CommentSortType = "New"
CommentSortOld CommentSortType = "Old"
)
type ListingType string
const (
ListingAll ListingType = "All"
ListingLocal ListingType = "Local"
ListingSubscribed ListingType = "Subscribed"
ListingCommunity ListingType = "Community"
)
type SearchType string
const (
SearchAll SearchType = "All"
SearchComments SearchType = "Comments"
SearchPosts SearchType = "Posts"
SearchCommunities SearchType = "Communities"
SearchUsers SearchType = "Users"
SearchURL SearchType = "URL"
)
type ModlogActionType string
const (
ModlogAll ModlogActionType = "All"
ModlogModRemovePost ModlogActionType = "ModRemovePost"
ModlogModLockPost ModlogActionType = "ModLockPost"
ModlogModStickyPost ModlogActionType = "ModStickyPost"
ModlogModRemoveComment ModlogActionType = "ModRemoveComment"
ModlogModRemoveCommunity ModlogActionType = "ModRemoveCommunity"
ModlogModBanFromCommunity ModlogActionType = "ModBanFromCommunity"
ModlogModAddCommunity ModlogActionType = "ModAddCommunity"
ModlogModTransferCommunity ModlogActionType = "ModTransferCommunity"
ModlogModAdd ModlogActionType = "ModAdd"
ModlogModBan ModlogActionType = "ModBan"
ModlogModHideCommunity ModlogActionType = "ModHideCommunity"
ModlogAdminPurgePerson ModlogActionType = "AdminPurgePerson"
ModlogAdminPurgeCommunity ModlogActionType = "AdminPurgeCommunity"
ModlogAdminPurgePost ModlogActionType = "AdminPurgePost"
ModlogAdminPurgeComment ModlogActionType = "AdminPurgeComment"
)
type SubscribedType string
const (
Subscribed SubscribedType = "Subscribed"
NotSubscribed SubscribedType = "NotSubscribed"
Pending SubscribedType = "Pending"
)

View File

@@ -0,0 +1,15 @@
// Source: lemmy/crates/db_schema/src/source/password_reset_request.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type PasswordResetRequest struct {
ID int32 `json:"id" url:"id,omitempty"`
TokenEncrypted string `json:"token_encrypted" url:"token_encrypted,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
LocalUserID int `json:"local_user_id" url:"local_user_id,omitempty"`
}
type PasswordResetRequestForm struct {
LocalUserID int `json:"local_user_id" url:"local_user_id,omitempty"`
TokenEncrypted string `json:"token_encrypted" url:"token_encrypted,omitempty"`
}

105
types/person.1.gen.go Normal file
View File

@@ -0,0 +1,105 @@
// Source: lemmy/crates/db_schema/src/source/person.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type Person struct {
ID int `json:"id" url:"id,omitempty"`
Name string `json:"name" url:"name,omitempty"`
DisplayName Optional[string] `json:"display_name" url:"display_name,omitempty"`
Avatar Optional[string] `json:"avatar" url:"avatar,omitempty"`
Banned bool `json:"banned" url:"banned,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
ActorID string `json:"actor_id" url:"actor_id,omitempty"`
Bio Optional[string] `json:"bio" url:"bio,omitempty"`
Local bool `json:"local" url:"local,omitempty"`
PrivateKey Optional[string] `json:"private_key" url:"private_key,omitempty"`
PublicKey string `json:"public_key" url:"public_key,omitempty"`
LastRefreshedAt LemmyTime `json:"last_refreshed_at" url:"last_refreshed_at,omitempty"`
Banner Optional[string] `json:"banner" url:"banner,omitempty"`
Deleted bool `json:"deleted" url:"deleted,omitempty"`
InboxURL string `json:"inbox_url" url:"inbox_url,omitempty"`
SharedInboxURL Optional[string] `json:"shared_inbox_url" url:"shared_inbox_url,omitempty"`
MatrixUserID Optional[string] `json:"matrix_user_id" url:"matrix_user_id,omitempty"`
Admin bool `json:"admin" url:"admin,omitempty"`
BotAccount bool `json:"bot_account" url:"bot_account,omitempty"`
BanExpires LemmyTime `json:"ban_expires" url:"ban_expires,omitempty"`
InstanceID int `json:"instance_id" url:"instance_id,omitempty"`
}
type PersonSafe struct {
ID int `json:"id" url:"id,omitempty"`
Name string `json:"name" url:"name,omitempty"`
DisplayName Optional[string] `json:"display_name" url:"display_name,omitempty"`
Avatar Optional[string] `json:"avatar" url:"avatar,omitempty"`
Banned bool `json:"banned" url:"banned,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
ActorID string `json:"actor_id" url:"actor_id,omitempty"`
Bio Optional[string] `json:"bio" url:"bio,omitempty"`
Local bool `json:"local" url:"local,omitempty"`
Banner Optional[string] `json:"banner" url:"banner,omitempty"`
Deleted bool `json:"deleted" url:"deleted,omitempty"`
InboxURL string `json:"inbox_url" url:"inbox_url,omitempty"`
SharedInboxURL Optional[string] `json:"shared_inbox_url" url:"shared_inbox_url,omitempty"`
MatrixUserID Optional[string] `json:"matrix_user_id" url:"matrix_user_id,omitempty"`
Admin bool `json:"admin" url:"admin,omitempty"`
BotAccount bool `json:"bot_account" url:"bot_account,omitempty"`
BanExpires LemmyTime `json:"ban_expires" url:"ban_expires,omitempty"`
InstanceID int `json:"instance_id" url:"instance_id,omitempty"`
}
type PersonInsertForm struct {
Name string `json:"name" url:"name,omitempty"`
PublicKey string `json:"public_key" url:"public_key,omitempty"`
InstanceID int `json:"instance_id" url:"instance_id,omitempty"`
DisplayName Optional[string] `json:"display_name" url:"display_name,omitempty"`
Avatar Optional[string] `json:"avatar" url:"avatar,omitempty"`
Banned Optional[bool] `json:"banned" url:"banned,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
ActorID Optional[string] `json:"actor_id" url:"actor_id,omitempty"`
Bio Optional[string] `json:"bio" url:"bio,omitempty"`
Local Optional[bool] `json:"local" url:"local,omitempty"`
PrivateKey Optional[string] `json:"private_key" url:"private_key,omitempty"`
LastRefreshedAt LemmyTime `json:"last_refreshed_at" url:"last_refreshed_at,omitempty"`
Banner Optional[string] `json:"banner" url:"banner,omitempty"`
Deleted Optional[bool] `json:"deleted" url:"deleted,omitempty"`
InboxURL Optional[string] `json:"inbox_url" url:"inbox_url,omitempty"`
SharedInboxURL Optional[string] `json:"shared_inbox_url" url:"shared_inbox_url,omitempty"`
MatrixUserID Optional[string] `json:"matrix_user_id" url:"matrix_user_id,omitempty"`
Admin Optional[bool] `json:"admin" url:"admin,omitempty"`
BotAccount Optional[bool] `json:"bot_account" url:"bot_account,omitempty"`
BanExpires LemmyTime `json:"ban_expires" url:"ban_expires,omitempty"`
}
type PersonUpdateForm struct {
DisplayName Optional[Optional[string]] `json:"display_name" url:"display_name,omitempty"`
Avatar Optional[Optional[string]] `json:"avatar" url:"avatar,omitempty"`
Banned Optional[bool] `json:"banned" url:"banned,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
ActorID Optional[string] `json:"actor_id" url:"actor_id,omitempty"`
Bio Optional[Optional[string]] `json:"bio" url:"bio,omitempty"`
Local Optional[bool] `json:"local" url:"local,omitempty"`
PublicKey Optional[string] `json:"public_key" url:"public_key,omitempty"`
PrivateKey Optional[Optional[string]] `json:"private_key" url:"private_key,omitempty"`
LastRefreshedAt LemmyTime `json:"last_refreshed_at" url:"last_refreshed_at,omitempty"`
Banner Optional[Optional[string]] `json:"banner" url:"banner,omitempty"`
Deleted Optional[bool] `json:"deleted" url:"deleted,omitempty"`
InboxURL Optional[string] `json:"inbox_url" url:"inbox_url,omitempty"`
SharedInboxURL Optional[Optional[string]] `json:"shared_inbox_url" url:"shared_inbox_url,omitempty"`
MatrixUserID Optional[Optional[string]] `json:"matrix_user_id" url:"matrix_user_id,omitempty"`
Admin Optional[bool] `json:"admin" url:"admin,omitempty"`
BotAccount Optional[bool] `json:"bot_account" url:"bot_account,omitempty"`
BanExpires LemmyTime `json:"ban_expires" url:"ban_expires,omitempty"`
}
type PersonFollower struct {
ID int32 `json:"id" url:"id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
FollowerID int `json:"follower_id" url:"follower_id,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Pending bool `json:"pending" url:"pending,omitempty"`
}
type PersonFollowerForm struct {
PersonID int `json:"person_id" url:"person_id,omitempty"`
FollowerID int `json:"follower_id" url:"follower_id,omitempty"`
Pending bool `json:"pending" url:"pending,omitempty"`
}

208
types/person.gen.go Normal file
View File

@@ -0,0 +1,208 @@
// Source: lemmy/crates/api_common/src/person.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type Login struct {
UsernameOrEmail string `json:"username_or_email" url:"username_or_email,omitempty"`
Password string `json:"password" url:"password,omitempty"`
}
type Register struct {
Username string `json:"username" url:"username,omitempty"`
Password string `json:"password" url:"password,omitempty"`
PasswordVerify string `json:"password_verify" url:"password_verify,omitempty"`
ShowNSFW bool `json:"show_nsfw" url:"show_nsfw,omitempty"`
Email Optional[string] `json:"email" url:"email,omitempty"`
CaptchaUuid Optional[string] `json:"captcha_uuid" url:"captcha_uuid,omitempty"`
CaptchaAnswer Optional[string] `json:"captcha_answer" url:"captcha_answer,omitempty"`
Honeypot Optional[string] `json:"honeypot" url:"honeypot,omitempty"`
Answer Optional[string] `json:"answer" url:"answer,omitempty"`
}
type GetCaptcha struct{}
type GetCaptchaResponse struct {
Ok Optional[CaptchaResponse] `json:"ok" url:"ok,omitempty"`
LemmyResponse
}
type CaptchaResponse struct {
Png string `json:"png" url:"png,omitempty"`
Wav string `json:"wav" url:"wav,omitempty"`
Uuid string `json:"uuid" url:"uuid,omitempty"`
LemmyResponse
}
type SaveUserSettings struct {
ShowNSFW Optional[bool] `json:"show_nsfw" url:"show_nsfw,omitempty"`
ShowScores Optional[bool] `json:"show_scores" url:"show_scores,omitempty"`
Theme Optional[string] `json:"theme" url:"theme,omitempty"`
DefaultSortType Optional[int16] `json:"default_sort_type" url:"default_sort_type,omitempty"`
DefaultListingType Optional[int16] `json:"default_listing_type" url:"default_listing_type,omitempty"`
InterfaceLanguage Optional[string] `json:"interface_language" url:"interface_language,omitempty"`
Avatar Optional[string] `json:"avatar" url:"avatar,omitempty"`
Banner Optional[string] `json:"banner" url:"banner,omitempty"`
DisplayName Optional[string] `json:"display_name" url:"display_name,omitempty"`
Email Optional[string] `json:"email" url:"email,omitempty"`
Bio Optional[string] `json:"bio" url:"bio,omitempty"`
MatrixUserID Optional[string] `json:"matrix_user_id" url:"matrix_user_id,omitempty"`
ShowAvatars Optional[bool] `json:"show_avatars" url:"show_avatars,omitempty"`
SendNotificationsToEmail Optional[bool] `json:"send_notifications_to_email" url:"send_notifications_to_email,omitempty"`
BotAccount Optional[bool] `json:"bot_account" url:"bot_account,omitempty"`
ShowBotAccounts Optional[bool] `json:"show_bot_accounts" url:"show_bot_accounts,omitempty"`
ShowReadPosts Optional[bool] `json:"show_read_posts" url:"show_read_posts,omitempty"`
ShowNewPostNotifs Optional[bool] `json:"show_new_post_notifs" url:"show_new_post_notifs,omitempty"`
DiscussionLanguages Optional[[]int] `json:"discussion_languages" url:"discussion_languages,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type ChangePassword struct {
NewPassword string `json:"new_password" url:"new_password,omitempty"`
NewPasswordVerify string `json:"new_password_verify" url:"new_password_verify,omitempty"`
OldPassword string `json:"old_password" url:"old_password,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type LoginResponse struct {
JWT Optional[string] `json:"jwt" url:"jwt,omitempty"`
RegistrationCreated bool `json:"registration_created" url:"registration_created,omitempty"`
VerifyEmailSent bool `json:"verify_email_sent" url:"verify_email_sent,omitempty"`
LemmyResponse
}
type GetPersonDetails struct {
PersonID Optional[int] `json:"person_id" url:"person_id,omitempty"`
Username Optional[string] `json:"username" url:"username,omitempty"`
Sort Optional[SortType] `json:"sort" url:"sort,omitempty"`
Page Optional[int64] `json:"page" url:"page,omitempty"`
Limit Optional[int64] `json:"limit" url:"limit,omitempty"`
CommunityID Optional[int] `json:"community_id" url:"community_id,omitempty"`
SavedOnly Optional[bool] `json:"saved_only" url:"saved_only,omitempty"`
Auth Optional[string] `json:"auth" url:"auth,omitempty"`
}
type GetPersonDetailsResponse struct {
PersonView PersonViewSafe `json:"person_view" url:"person_view,omitempty"`
Comments []CommentView `json:"comments" url:"comments,omitempty"`
Posts []PostView `json:"posts" url:"posts,omitempty"`
Moderates []CommunityModeratorView `json:"moderates" url:"moderates,omitempty"`
LemmyResponse
}
type GetRepliesResponse struct {
Replies []CommentReplyView `json:"replies" url:"replies,omitempty"`
LemmyResponse
}
type GetPersonMentionsResponse struct {
Mentions []PersonMentionView `json:"mentions" url:"mentions,omitempty"`
LemmyResponse
}
type MarkAllAsRead struct {
Auth string `json:"auth" url:"auth,omitempty"`
}
type AddAdmin struct {
PersonID int `json:"person_id" url:"person_id,omitempty"`
Added bool `json:"added" url:"added,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type AddAdminResponse struct {
Admins []PersonViewSafe `json:"admins" url:"admins,omitempty"`
LemmyResponse
}
type BanPerson struct {
PersonID int `json:"person_id" url:"person_id,omitempty"`
Ban bool `json:"ban" url:"ban,omitempty"`
RemoveData Optional[bool] `json:"remove_data" url:"remove_data,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Expires Optional[int64] `json:"expires" url:"expires,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type GetBannedPersons struct {
Auth string `json:"auth" url:"auth,omitempty"`
}
type BannedPersonsResponse struct {
Banned []PersonViewSafe `json:"banned" url:"banned,omitempty"`
LemmyResponse
}
type BanPersonResponse struct {
PersonView PersonViewSafe `json:"person_view" url:"person_view,omitempty"`
Banned bool `json:"banned" url:"banned,omitempty"`
LemmyResponse
}
type BlockPerson struct {
PersonID int `json:"person_id" url:"person_id,omitempty"`
Block bool `json:"block" url:"block,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type BlockPersonResponse struct {
PersonView PersonViewSafe `json:"person_view" url:"person_view,omitempty"`
Blocked bool `json:"blocked" url:"blocked,omitempty"`
LemmyResponse
}
type GetReplies struct {
Sort Optional[CommentSortType] `json:"sort" url:"sort,omitempty"`
Page Optional[int64] `json:"page" url:"page,omitempty"`
Limit Optional[int64] `json:"limit" url:"limit,omitempty"`
UnreadOnly Optional[bool] `json:"unread_only" url:"unread_only,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type GetPersonMentions struct {
Sort Optional[CommentSortType] `json:"sort" url:"sort,omitempty"`
Page Optional[int64] `json:"page" url:"page,omitempty"`
Limit Optional[int64] `json:"limit" url:"limit,omitempty"`
UnreadOnly Optional[bool] `json:"unread_only" url:"unread_only,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type MarkPersonMentionAsRead struct {
PersonMentionID int `json:"person_mention_id" url:"person_mention_id,omitempty"`
Read bool `json:"read" url:"read,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type PersonMentionResponse struct {
PersonMentionView PersonMentionView `json:"person_mention_view" url:"person_mention_view,omitempty"`
LemmyResponse
}
type MarkCommentReplyAsRead struct {
CommentReplyID int `json:"comment_reply_id" url:"comment_reply_id,omitempty"`
Read bool `json:"read" url:"read,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type CommentReplyResponse struct {
CommentReplyView CommentReplyView `json:"comment_reply_view" url:"comment_reply_view,omitempty"`
LemmyResponse
}
type DeleteAccount struct {
Password string `json:"password" url:"password,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type DeleteAccountResponse struct {
LemmyResponse
}
type PasswordReset struct {
Email string `json:"email" url:"email,omitempty"`
}
type PasswordResetResponse struct {
LemmyResponse
}
type PasswordChangeAfterReset struct {
Token string `json:"token" url:"token,omitempty"`
Password string `json:"password" url:"password,omitempty"`
PasswordVerify string `json:"password_verify" url:"password_verify,omitempty"`
}
type GetReportCount struct {
CommunityID Optional[int] `json:"community_id" url:"community_id,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type GetReportCountResponse struct {
CommunityID Optional[int] `json:"community_id" url:"community_id,omitempty"`
CommentReports int64 `json:"comment_reports" url:"comment_reports,omitempty"`
PostReports int64 `json:"post_reports" url:"post_reports,omitempty"`
PrivateMessageReports Optional[int64] `json:"private_message_reports" url:"private_message_reports,omitempty"`
LemmyResponse
}
type GetUnreadCount struct {
Auth string `json:"auth" url:"auth,omitempty"`
}
type GetUnreadCountResponse struct {
Replies int64 `json:"replies" url:"replies,omitempty"`
Mentions int64 `json:"mentions" url:"mentions,omitempty"`
PrivateMessages int64 `json:"private_messages" url:"private_messages,omitempty"`
LemmyResponse
}
type VerifyEmail struct {
Token string `json:"token" url:"token,omitempty"`
}
type VerifyEmailResponse struct {
LemmyResponse
}

View File

@@ -1,243 +0,0 @@
package types
type Login struct {
Password string `json:"password,omitempty" url:"password,omitempty"`
UsernameOrEmail string `json:"username_or_email,omitempty" url:"username_or_email,omitempty"`
}
type LoginResponse struct {
JWT Optional[string] `json:"jwt,omitempty" url:"jwt,omitempty"`
RegistrationCreated bool `json:"registration_created,omitempty" url:"registration_created,omitempty"`
VeriftEmailSent bool `json:"verify_email_sent,omitempty" url:"verify_email_sent,omitempty"`
LemmyResponse
}
type Register struct {
Username string `json:"username,omitempty" url:"username,omitempty"`
Password string `json:"password,omitempty" url:"password,omitempty"`
PasswordVerify string `json:"password_verify,omitempty" url:"password_verify,omitempty"`
ShowNSFW bool `json:"show_nsfw,omitempty" url:"show_nsfw,omitempty"`
Email Optional[string] `json:"email,omitempty" url:"email,omitempty"`
CaptchaUuid Optional[string] `json:"captcha_uuid,omitempty" url:"captcha_uuid,omitempty"`
CaptchaAnswer Optional[string] `json:"captcha_answer,omitempty" url:"captcha_answer,omitempty"`
Honeypot Optional[string] `json:"honeypot,omitempty" url:"honeypot,omitempty"`
Answer Optional[string] `json:"answer,omitempty" url:"answer,omitempty"`
}
type GetCaptcha struct{}
type CaptchaResponse struct {
Png string `json:"png,omitempty" url:"png,omitempty"`
Wav string `json:"wav,omitempty" url:"wav,omitempty"`
Uuid string `json:"uuid,omitempty" url:"uuid,omitempty"`
LemmyResponse
}
type SaveUserSettings struct {
ShowNSFW Optional[bool] `json:"show_nsfw,omitempty" url:"show_nsfw,omitempty"`
ShowScores Optional[bool] `json:"show_scores,omitempty" url:"show_scores,omitempty"`
Theme Optional[string] `json:"theme,omitempty" url:"theme,omitempty"`
DefaultSortType Optional[int16] `json:"default_sort_type,omitempty" url:"default_sort_type,omitempty"`
DefaultListingType Optional[int16] `json:"default_listing_type,omitempty" url:"default_listing_type,omitempty"`
InterfaceLanguage Optional[string] `json:"interface_language,omitempty" url:"interface_language,omitempty"`
Avatar Optional[string] `json:"avatar,omitempty" url:"avatar,omitempty"`
Banner Optional[string] `json:"banner,omitempty" url:"banner,omitempty"`
DisplayName Optional[string] `json:"display_name,omitempty" url:"display_name,omitempty"`
Email Optional[string] `json:"email,omitempty" url:"email,omitempty"`
Bio Optional[string] `json:"bio,omitempty" url:"bio,omitempty"`
MatrixUserID Optional[string] `json:"matrix_user_id,omitempty" url:"matrix_user_id,omitempty"`
ShowAvatars Optional[bool] `json:"show_avatars,omitempty" url:"show_avatars,omitempty"`
SendNotificationsToEmail Optional[bool] `json:"send_notifications_to_email,omitempty" url:"send_notifications_to_email,omitempty"`
BotAccount Optional[bool] `json:"bot_account,omitempty" url:"bot_account,omitempty"`
ShowBotAccounts Optional[bool] `json:"show_bot_accounts,omitempty" url:"show_bot_accounts,omitempty"`
ShowReadPosts Optional[bool] `json:"show_read_posts,omitempty" url:"show_read_posts,omitempty"`
ShowNewPostNotifs Optional[bool] `json:"show_new_post_notifs,omitempty" url:"show_new_post_notifs,omitempty"`
DiscussionLanguages Optional[[]int] `json:"discussion_languages,omitempty" url:"discussion_languages,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type ChangePassword struct {
NewPassword string `json:"new_password,omitempty" url:"new_password,omitempty"`
NewPasswordVerify string `json:"new_password_verify,omitempty" url:"new_password_verify,omitempty"`
OldPassword string `json:"old_password,omitempty" url:"old_password,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type GetPersonDetails struct {
PersonID Optional[int] `json:"person_id,omitempty" url:"person_id,omitempty"`
Username Optional[string] `json:"username,omitempty" url:"username,omitempty"`
Sort Optional[SortType] `json:"sort,omitempty" url:"sort,omitempty"`
Page Optional[int64] `json:"page,omitempty" url:"page,omitempty"`
Limit Optional[int64] `json:"limit,omitempty" url:"limit,omitempty"`
CommunityID Optional[int] `json:"community_id,omitempty" url:"community_id,omitempty"`
SavedOnly Optional[bool] `json:"saved_only,omitempty" url:"saved_only,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type GetPersonDetailsResponse struct {
PersonView PersonViewSafe `json:"person_view,omitempty" url:"person_view,omitempty"`
Comments []CommentView `json:"comments,omitempty" url:"comments,omitempty"`
Posts []PostView `json:"posts,omitempty" url:"posts,omitempty"`
Moderates []CommunityModeratorView `json:"moderates,omitempty" url:"moderates,omitempty"`
LemmyResponse
}
type GetReplies struct {
Limit Optional[int] `json:"limit,omitempty" url:"limit,omitempty"`
Page Optional[int] `json:"page,omitempty" url:"page,omitempty"`
Sort Optional[CommentSortType] `json:"sort,omitempty" url:"sort,omitempty"`
UnreadOnly Optional[bool] `json:"unread_only,omitempty" url:"unread_only,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type GetRepliesResponse struct {
Replies []CommentReplyView `json:"replies,omitempty" url:"replies,omitempty"`
LemmyResponse
}
type GetPersonMentionsResponse struct {
Mentions []PersonMentionView `json:"mentions,omitempty" url:"mentions,omitempty"`
LemmyResponse
}
type MarkAllAsRead struct {
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type AddAdmin struct {
PersonID int `json:"person_id,omitempty" url:"person_id,omitempty"`
Added bool `json:"added,omitempty" url:"added,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type AddAdminResponse struct {
Admins []PersonViewSafe `json:"admins,omitempty" url:"admins,omitempty"`
LemmyResponse
}
type BanPerson struct {
PersonID int `json:"person_id,omitempty" url:"person_id,omitempty"`
Ban bool `json:"ban,omitempty" url:"ban,omitempty"`
RemoveData Optional[bool] `json:"remove_data,omitempty" url:"remove_data,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
Expires Optional[int64] `json:"expires,omitempty" url:"expires,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type GetBannedPersons struct {
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type BanPersonResponse struct {
PersonView PersonViewSafe `json:"person_view,omitempty" url:"person_view,omitempty"`
Banned bool `json:"banned,omitempty" url:"banned,omitempty"`
LemmyResponse
}
type BlockPerson struct {
PersonID int `json:"person_id,omitempty" url:"person_id,omitempty"`
Block bool `json:"block,omitempty" url:"block,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type GetPersonMentions struct {
Sort Optional[CommentSortType] `json:"sort,omitempty" url:"sort,omitempty"`
Page Optional[int64] `json:"page,omitempty" url:"page,omitempty"`
Limit Optional[int64] `json:"limit,omitempty" url:"limit,omitempty"`
UnreadOnly Optional[bool] `json:"unread_only,omitempty" url:"unread_only,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type MarkPersonMentionAsRead struct {
PersonMentionID int `json:"person_mention_id,omitempty" url:"person_mention_id,omitempty"`
Read bool `json:"read,omitempty" url:"read,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type PersonMentionResponse struct {
PersonMentionView PersonMentionView `json:"person_mention_view,omitempty" url:"person_mention_view,omitempty"`
LemmyResponse
}
type MarkCommentReplyAsRead struct {
CommentReplyID int `json:"comment_reply_id,omitempty" url:"comment_reply_id,omitempty"`
Read bool `json:"read,omitempty" url:"read,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type CommentReplyResponse struct {
CommentReplyView CommentReplyView `json:"comment_reply_view,omitempty" url:"comment_reply_view,omitempty"`
LemmyResponse
}
type DeleteAccount struct {
Password string `json:"password,omitempty" url:"password,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type DeleteAccountResponse struct {
LemmyResponse
}
type PasswordReset struct {
Email string `json:"email,omitempty" url:"email,omitempty"`
}
type PasswordResetResponse struct {
LemmyResponse
}
type PasswordChangeAfterReset struct {
Token string `json:"token,omitempty" url:"token,omitempty"`
Password string `json:"password,omitempty" url:"password,omitempty"`
PasswordVerify string `json:"password_verify,omitempty" url:"password_verify,omitempty"`
}
type GetReportCount struct {
CommunityID Optional[int] `json:"community_id,omitempty" url:"community_id,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type GetReportCountResponse struct {
CommunityID Optional[int] `json:"community_id,omitempty" url:"community_id,omitempty"`
CommentReports int64 `json:"comment_reports,omitempty" url:"comment_reports,omitempty"`
PostReports int64 `json:"post_reports,omitempty" url:"post_reports,omitempty"`
PrivateMessageReports Optional[int64] `json:"private_message_reports,omitempty" url:"private_message_reports,omitempty"`
LemmyResponse
}
type GetUnreadCount struct {
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type GetUnreadCountResponse struct {
Replies int64 `json:"replies,omitempty" url:"replies,omitempty"`
Mentions int64 `json:"mentions,omitempty" url:"mentions,omitempty"`
PrivateMessages int64 `json:"private_messages,omitempty" url:"private_messages,omitempty"`
LemmyResponse
}
type VerifyEmail struct {
Token string `json:"token,omitempty" url:"token,omitempty"`
}
type VerifyEmailResponse struct {
LemmyResponse
}
type BlockPersonResponse struct {
Blocked bool `json:"blocked,omitempty" url:"blocked,omitempty"`
PersonView PersonViewSafe `json:"person_view,omitempty" url:"person_view,omitempty"`
LemmyResponse
}
type BannedPersonsResponse struct {
Banned []PersonViewSafe `json:"banned,omitempty" url:"banned,omitempty"`
LemmyResponse
}
type PasswordChange struct {
Password string `json:"password,omitempty" url:"password,omitempty"`
PasswordVerify string `json:"password_verify,omitempty" url:"password_verify,omitempty"`
Token string `json:"token,omitempty" url:"token,omitempty"`
}

15
types/person_block.gen.go Normal file
View File

@@ -0,0 +1,15 @@
// Source: lemmy/crates/db_schema/src/source/person_block.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type PersonBlock struct {
ID int `json:"id" url:"id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
TargetID int `json:"target_id" url:"target_id,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
}
type PersonBlockForm struct {
PersonID int `json:"person_id" url:"person_id,omitempty"`
TargetID int `json:"target_id" url:"target_id,omitempty"`
}

View File

@@ -0,0 +1,20 @@
// Source: lemmy/crates/db_schema/src/source/person_mention.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type PersonMention struct {
ID int `json:"id" url:"id,omitempty"`
RecipientID int `json:"recipient_id" url:"recipient_id,omitempty"`
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
Read bool `json:"read" url:"read,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
}
type PersonMentionInsertForm struct {
RecipientID int `json:"recipient_id" url:"recipient_id,omitempty"`
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
Read Optional[bool] `json:"read" url:"read,omitempty"`
}
type PersonMentionUpdateForm struct {
Read Optional[bool] `json:"read" url:"read,omitempty"`
}

102
types/post.1.gen.go Normal file
View File

@@ -0,0 +1,102 @@
// Source: lemmy/crates/db_schema/src/source/post.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type Post struct {
ID int `json:"id" url:"id,omitempty"`
Name string `json:"name" url:"name,omitempty"`
URL Optional[string] `json:"url" url:"url,omitempty"`
Body Optional[string] `json:"body" url:"body,omitempty"`
CreatorID int `json:"creator_id" url:"creator_id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Removed bool `json:"removed" url:"removed,omitempty"`
Locked bool `json:"locked" url:"locked,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
Deleted bool `json:"deleted" url:"deleted,omitempty"`
NSFW bool `json:"nsfw" url:"nsfw,omitempty"`
EmbedTitle Optional[string] `json:"embed_title" url:"embed_title,omitempty"`
EmbedDescription Optional[string] `json:"embed_description" url:"embed_description,omitempty"`
EmbedVideoURL Optional[string] `json:"embed_video_url" url:"embed_video_url,omitempty"`
ThumbnailURL Optional[string] `json:"thumbnail_url" url:"thumbnail_url,omitempty"`
ApID string `json:"ap_id" url:"ap_id,omitempty"`
Local bool `json:"local" url:"local,omitempty"`
LanguageID int `json:"language_id" url:"language_id,omitempty"`
FeaturedCommunity bool `json:"featured_community" url:"featured_community,omitempty"`
FeaturedLocal bool `json:"featured_local" url:"featured_local,omitempty"`
}
type PostInsertForm struct {
Name string `json:"name" url:"name,omitempty"`
CreatorID int `json:"creator_id" url:"creator_id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
NSFW Optional[bool] `json:"nsfw" url:"nsfw,omitempty"`
URL Optional[string] `json:"url" url:"url,omitempty"`
Body Optional[string] `json:"body" url:"body,omitempty"`
Removed Optional[bool] `json:"removed" url:"removed,omitempty"`
Locked Optional[bool] `json:"locked" url:"locked,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Deleted Optional[bool] `json:"deleted" url:"deleted,omitempty"`
EmbedTitle Optional[string] `json:"embed_title" url:"embed_title,omitempty"`
EmbedDescription Optional[string] `json:"embed_description" url:"embed_description,omitempty"`
EmbedVideoURL Optional[string] `json:"embed_video_url" url:"embed_video_url,omitempty"`
ThumbnailURL Optional[string] `json:"thumbnail_url" url:"thumbnail_url,omitempty"`
ApID Optional[string] `json:"ap_id" url:"ap_id,omitempty"`
Local Optional[bool] `json:"local" url:"local,omitempty"`
LanguageID Optional[int] `json:"language_id" url:"language_id,omitempty"`
FeaturedCommunity Optional[bool] `json:"featured_community" url:"featured_community,omitempty"`
FeaturedLocal Optional[bool] `json:"featured_local" url:"featured_local,omitempty"`
}
type PostUpdateForm struct {
Name Optional[string] `json:"name" url:"name,omitempty"`
NSFW Optional[bool] `json:"nsfw" url:"nsfw,omitempty"`
URL Optional[Optional[string]] `json:"url" url:"url,omitempty"`
Body Optional[Optional[string]] `json:"body" url:"body,omitempty"`
Removed Optional[bool] `json:"removed" url:"removed,omitempty"`
Locked Optional[bool] `json:"locked" url:"locked,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
Deleted Optional[bool] `json:"deleted" url:"deleted,omitempty"`
EmbedTitle Optional[Optional[string]] `json:"embed_title" url:"embed_title,omitempty"`
EmbedDescription Optional[Optional[string]] `json:"embed_description" url:"embed_description,omitempty"`
EmbedVideoURL Optional[Optional[string]] `json:"embed_video_url" url:"embed_video_url,omitempty"`
ThumbnailURL Optional[Optional[string]] `json:"thumbnail_url" url:"thumbnail_url,omitempty"`
ApID Optional[string] `json:"ap_id" url:"ap_id,omitempty"`
Local Optional[bool] `json:"local" url:"local,omitempty"`
LanguageID Optional[int] `json:"language_id" url:"language_id,omitempty"`
FeaturedCommunity Optional[bool] `json:"featured_community" url:"featured_community,omitempty"`
FeaturedLocal Optional[bool] `json:"featured_local" url:"featured_local,omitempty"`
}
type PostLike struct {
ID int32 `json:"id" url:"id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
Score int16 `json:"score" url:"score,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
}
type PostLikeForm struct {
PostID int `json:"post_id" url:"post_id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
Score int16 `json:"score" url:"score,omitempty"`
}
type PostSaved struct {
ID int32 `json:"id" url:"id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
}
type PostSavedForm struct {
PostID int `json:"post_id" url:"post_id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
}
type PostRead struct {
ID int32 `json:"id" url:"id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
}
type PostReadForm struct {
PostID int `json:"post_id" url:"post_id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
}

129
types/post.gen.go Normal file
View File

@@ -0,0 +1,129 @@
// Source: lemmy/crates/api_common/src/post.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type CreatePost struct {
Name string `json:"name" url:"name,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
URL Optional[string] `json:"url" url:"url,omitempty"`
Body Optional[string] `json:"body" url:"body,omitempty"`
Honeypot Optional[string] `json:"honeypot" url:"honeypot,omitempty"`
NSFW Optional[bool] `json:"nsfw" url:"nsfw,omitempty"`
LanguageID Optional[int] `json:"language_id" url:"language_id,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type PostResponse struct {
PostView PostView `json:"post_view" url:"post_view,omitempty"`
LemmyResponse
}
type GetPost struct {
ID Optional[int] `json:"id" url:"id,omitempty"`
CommentID Optional[int] `json:"comment_id" url:"comment_id,omitempty"`
Auth Optional[string] `json:"auth" url:"auth,omitempty"`
}
type GetPostResponse struct {
PostView PostView `json:"post_view" url:"post_view,omitempty"`
CommunityView CommunityView `json:"community_view" url:"community_view,omitempty"`
Moderators []CommunityModeratorView `json:"moderators" url:"moderators,omitempty"`
Online uint `json:"online" url:"online,omitempty"`
LemmyResponse
}
type GetPosts struct {
Type Optional[ListingType] `json:"type_" url:"type_,omitempty"`
Sort Optional[SortType] `json:"sort" url:"sort,omitempty"`
Page Optional[int64] `json:"page" url:"page,omitempty"`
Limit Optional[int64] `json:"limit" url:"limit,omitempty"`
CommunityID Optional[int] `json:"community_id" url:"community_id,omitempty"`
CommunityName Optional[string] `json:"community_name" url:"community_name,omitempty"`
SavedOnly Optional[bool] `json:"saved_only" url:"saved_only,omitempty"`
Auth Optional[string] `json:"auth" url:"auth,omitempty"`
}
type GetPostsResponse struct {
Posts []PostView `json:"posts" url:"posts,omitempty"`
LemmyResponse
}
type CreatePostLike struct {
PostID int `json:"post_id" url:"post_id,omitempty"`
Score int16 `json:"score" url:"score,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type EditPost struct {
PostID int `json:"post_id" url:"post_id,omitempty"`
Name Optional[string] `json:"name" url:"name,omitempty"`
URL Optional[string] `json:"url" url:"url,omitempty"`
Body Optional[string] `json:"body" url:"body,omitempty"`
NSFW Optional[bool] `json:"nsfw" url:"nsfw,omitempty"`
LanguageID Optional[int] `json:"language_id" url:"language_id,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type DeletePost struct {
PostID int `json:"post_id" url:"post_id,omitempty"`
Deleted bool `json:"deleted" url:"deleted,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type RemovePost struct {
PostID int `json:"post_id" url:"post_id,omitempty"`
Removed bool `json:"removed" url:"removed,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type MarkPostAsRead struct {
PostID int `json:"post_id" url:"post_id,omitempty"`
Read bool `json:"read" url:"read,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type LockPost struct {
PostID int `json:"post_id" url:"post_id,omitempty"`
Locked bool `json:"locked" url:"locked,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type FeaturePost struct {
PostID int `json:"post_id" url:"post_id,omitempty"`
Featured bool `json:"featured" url:"featured,omitempty"`
FeatureType PostFeatureType `json:"feature_type" url:"feature_type,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type SavePost struct {
PostID int `json:"post_id" url:"post_id,omitempty"`
Save bool `json:"save" url:"save,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type CreatePostReport struct {
PostID int `json:"post_id" url:"post_id,omitempty"`
Reason string `json:"reason" url:"reason,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type PostReportResponse struct {
PostReportView PostReportView `json:"post_report_view" url:"post_report_view,omitempty"`
LemmyResponse
}
type ResolvePostReport struct {
ReportID int `json:"report_id" url:"report_id,omitempty"`
Resolved bool `json:"resolved" url:"resolved,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type ListPostReports struct {
Page Optional[int64] `json:"page" url:"page,omitempty"`
Limit Optional[int64] `json:"limit" url:"limit,omitempty"`
UnresolvedOnly Optional[bool] `json:"unresolved_only" url:"unresolved_only,omitempty"`
CommunityID Optional[int] `json:"community_id" url:"community_id,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type ListPostReportsResponse struct {
PostReports []PostReportView `json:"post_reports" url:"post_reports,omitempty"`
LemmyResponse
}
type GetSiteMetadata struct {
URL string `json:"url" url:"url,omitempty"`
}
type GetSiteMetadataResponse struct {
Metadata SiteMetadata `json:"metadata" url:"metadata,omitempty"`
LemmyResponse
}
type SiteMetadata struct {
Title Optional[string] `json:"title" url:"title,omitempty"`
Description Optional[string] `json:"description" url:"description,omitempty"`
Image Optional[string] `json:"image" url:"image,omitempty"`
EmbedVideoURL Optional[string] `json:"embed_video_url" url:"embed_video_url,omitempty"`
}

View File

@@ -1,146 +0,0 @@
package types
type CreatePost struct {
Name string `json:"name,omitempty" url:"name,omitempty"`
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
URL Optional[string] `json:"url,omitempty" url:"url,omitempty"`
Body Optional[string] `json:"body,omitempty" url:"body,omitempty"`
Honeypot Optional[string] `json:"honeypot,omitempty" url:"honeypot,omitempty"`
NSFW Optional[bool] `json:"nsfw,omitempty" url:"nsfw,omitempty"`
LanguageID Optional[int] `json:"language_id,omitempty" url:"language_id,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type PostResponse struct {
PostView PostView `json:"post_view,omitempty" url:"post_view,omitempty"`
LemmyResponse
}
type GetPost struct {
ID Optional[int] `json:"id,omitempty" url:"id,omitempty"`
CommentID Optional[int] `json:"comment_id,omitempty" url:"comment_id,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type GetPostResponse struct {
PostView PostView `json:"post_view,omitempty" url:"post_view,omitempty"`
CommunityView CommunityView `json:"community_view,omitempty" url:"community_view,omitempty"`
Moderators []CommunityModeratorView `json:"moderators,omitempty" url:"moderators,omitempty"`
Online uint `json:"online,omitempty" url:"online,omitempty"`
LemmyResponse
}
type GetPosts struct {
Type Optional[ListingType] `json:"type,omitempty" url:"type,omitempty"`
Sort Optional[SortType] `json:"sort,omitempty" url:"sort,omitempty"`
Page Optional[int64] `json:"page,omitempty" url:"page,omitempty"`
Limit Optional[int64] `json:"limit,omitempty" url:"limit,omitempty"`
CommunityID Optional[int] `json:"community_id,omitempty" url:"community_id,omitempty"`
CommunityName Optional[string] `json:"community_name,omitempty" url:"community_name,omitempty"`
SavedOnly Optional[bool] `json:"saved_only,omitempty" url:"saved_only,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type GetPostsResponse struct {
Posts []PostView `json:"posts,omitempty" url:"posts,omitempty"`
LemmyResponse
}
type CreatePostLike struct {
PostID int `json:"post_id,omitempty" url:"post_id,omitempty"`
Score int16 `json:"score,omitempty" url:"score,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type EditPost struct {
PostID int `json:"post_id,omitempty" url:"post_id,omitempty"`
Name Optional[string] `json:"name,omitempty" url:"name,omitempty"`
URL Optional[string] `json:"url,omitempty" url:"url,omitempty"`
Body Optional[string] `json:"body,omitempty" url:"body,omitempty"`
NSFW Optional[bool] `json:"nsfw,omitempty" url:"nsfw,omitempty"`
LanguageID Optional[int] `json:"language_id,omitempty" url:"language_id,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type DeletePost struct {
PostID int `json:"post_id,omitempty" url:"post_id,omitempty"`
Deleted bool `json:"deleted,omitempty" url:"deleted,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type RemovePost struct {
PostID int `json:"post_id,omitempty" url:"post_id,omitempty"`
Removed bool `json:"removed,omitempty" url:"removed,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type MarkPostAsRead struct {
PostID int `json:"post_id,omitempty" url:"post_id,omitempty"`
Read bool `json:"read,omitempty" url:"read,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type LockPost struct {
PostID int `json:"post_id,omitempty" url:"post_id,omitempty"`
Locked bool `json:"locked,omitempty" url:"locked,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type StickyPost struct {
PostID int `json:"post_id,omitempty" url:"post_id,omitempty"`
Stickied bool `json:"stickied,omitempty" url:"stickied,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type SavePost struct {
PostID int `json:"post_id,omitempty" url:"post_id,omitempty"`
Save bool `json:"save,omitempty" url:"save,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type CreatePostReport struct {
PostID int `json:"post_id,omitempty" url:"post_id,omitempty"`
Reason string `json:"reason,omitempty" url:"reason,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type PostReportResponse struct {
PostReportView PostReportView `json:"post_report_view,omitempty" url:"post_report_view,omitempty"`
LemmyResponse
}
type ResolvePostReport struct {
ReportID int `json:"report_id,omitempty" url:"report_id,omitempty"`
Resolved bool `json:"resolved,omitempty" url:"resolved,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type ListPostReports struct {
Page Optional[int64] `json:"page,omitempty" url:"page,omitempty"`
Limit Optional[int64] `json:"limit,omitempty" url:"limit,omitempty"`
UnresolvedOnly Optional[bool] `json:"unresolved_only,omitempty" url:"unresolved_only,omitempty"`
CommunityID Optional[int] `json:"community_id,omitempty" url:"community_id,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type ListPostReportsResponse struct {
PostReports []PostReportView `json:"post_reports,omitempty" url:"post_reports,omitempty"`
LemmyResponse
}
type GetSiteMetadata struct {
URL string `json:"url,omitempty" url:"url,omitempty"`
}
type GetSiteMetadataResponse struct {
Metadata SiteMetadata `json:"metadata,omitempty" url:"metadata,omitempty"`
LemmyResponse
}
type SiteMetadata struct {
Title Optional[string] `json:"title,omitempty" url:"title,omitempty"`
Description Optional[string] `json:"description,omitempty" url:"description,omitempty"`
Image Optional[string] `json:"image,omitempty" url:"image,omitempty"`
EmbedVideoURL Optional[string] `json:"embed_video_url,omitempty" url:"embed_video_url,omitempty"`
}

26
types/post_report.gen.go Normal file
View File

@@ -0,0 +1,26 @@
// Source: lemmy/crates/db_schema/src/source/post_report.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type PostReport struct {
ID int `json:"id" url:"id,omitempty"`
CreatorID int `json:"creator_id" url:"creator_id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
OriginalPostName string `json:"original_post_name" url:"original_post_name,omitempty"`
OriginalPostURL Optional[string] `json:"original_post_url" url:"original_post_url,omitempty"`
OriginalPostBody Optional[string] `json:"original_post_body" url:"original_post_body,omitempty"`
Reason string `json:"reason" url:"reason,omitempty"`
Resolved bool `json:"resolved" url:"resolved,omitempty"`
ResolverID Optional[int] `json:"resolver_id" url:"resolver_id,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
}
type PostReportForm struct {
CreatorID int `json:"creator_id" url:"creator_id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
OriginalPostName string `json:"original_post_name" url:"original_post_name,omitempty"`
OriginalPostURL Optional[string] `json:"original_post_url" url:"original_post_url,omitempty"`
OriginalPostBody Optional[string] `json:"original_post_body" url:"original_post_body,omitempty"`
Reason string `json:"reason" url:"reason,omitempty"`
}

View File

@@ -1,71 +0,0 @@
package types
type CreatePrivateMessage struct {
Content string `json:"content,omitempty" url:"content,omitempty"`
RecipientID int `json:"recipient_id,omitempty" url:"recipient_id,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type EditPrivateMessage struct {
PrivateMessageID int `json:"private_message_id,omitempty" url:"private_message_id,omitempty"`
Content string `json:"content,omitempty" url:"content,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type DeletePrivateMessage struct {
PrivateMessageID int `json:"private_message_id,omitempty" url:"private_message_id,omitempty"`
Deleted bool `json:"deleted,omitempty" url:"deleted,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type MarkPrivateMessageAsRead struct {
PrivateMessageID int `json:"private_message_id,omitempty" url:"private_message_id,omitempty"`
Read bool `json:"read,omitempty" url:"read,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type GetPrivateMessages struct {
UnreadOnly Optional[bool] `json:"unread_only,omitempty" url:"unread_only,omitempty"`
Page Optional[int64] `json:"page,omitempty" url:"page,omitempty"`
Limit Optional[int64] `json:"limit,omitempty" url:"limit,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type PrivateMessagesResponse struct {
PrivateMessages []PrivateMessageView `json:"private_messages,omitempty" url:"private_messages,omitempty"`
LemmyResponse
}
type PrivateMessageResponse struct {
PrivateMessageView PrivateMessageView `json:"private_message_view,omitempty" url:"private_message_view,omitempty"`
LemmyResponse
}
type CreatePrivateMessageReport struct {
PrivateMessageID int `json:"private_message_id,omitempty" url:"private_message_id,omitempty"`
Reason string `json:"reason,omitempty" url:"reason,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type PrivateMessageReportResponse struct {
PrivateMessageReportView PrivateMessageReportView `json:"private_message_report_view,omitempty" url:"private_message_report_view,omitempty"`
LemmyResponse
}
type ResolvePrivateMessageReport struct {
ReportID int `json:"report_id,omitempty" url:"report_id,omitempty"`
Resolved bool `json:"resolved,omitempty" url:"resolved,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type ListPrivateMessageReports struct {
Page Optional[int64] `json:"page,omitempty" url:"page,omitempty"`
Limit Optional[int64] `json:"limit,omitempty" url:"limit,omitempty"`
UnresolvedOnly Optional[bool] `json:"unresolved_only,omitempty" url:"unresolved_only,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type ListPrivateMessageReportsResponse struct {
PrivateMessageReports []PrivateMessageReportView `json:"private_message_reports,omitempty" url:"private_message_reports,omitempty"`
LemmyResponse
}

View File

@@ -0,0 +1,37 @@
// Source: lemmy/crates/db_schema/src/source/private_message.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type PrivateMessage struct {
ID int `json:"id" url:"id,omitempty"`
CreatorID int `json:"creator_id" url:"creator_id,omitempty"`
RecipientID int `json:"recipient_id" url:"recipient_id,omitempty"`
Content string `json:"content" url:"content,omitempty"`
Deleted bool `json:"deleted" url:"deleted,omitempty"`
Read bool `json:"read" url:"read,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
ApID string `json:"ap_id" url:"ap_id,omitempty"`
Local bool `json:"local" url:"local,omitempty"`
}
type PrivateMessageInsertForm struct {
CreatorID int `json:"creator_id" url:"creator_id,omitempty"`
RecipientID int `json:"recipient_id" url:"recipient_id,omitempty"`
Content string `json:"content" url:"content,omitempty"`
Deleted Optional[bool] `json:"deleted" url:"deleted,omitempty"`
Read Optional[bool] `json:"read" url:"read,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
ApID Optional[string] `json:"ap_id" url:"ap_id,omitempty"`
Local Optional[bool] `json:"local" url:"local,omitempty"`
}
type PrivateMessageUpdateForm struct {
Content Optional[string] `json:"content" url:"content,omitempty"`
Deleted Optional[bool] `json:"deleted" url:"deleted,omitempty"`
Read Optional[bool] `json:"read" url:"read,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
ApID Optional[string] `json:"ap_id" url:"ap_id,omitempty"`
Local Optional[bool] `json:"local" url:"local,omitempty"`
}

View File

@@ -0,0 +1,63 @@
// Source: lemmy/crates/api_common/src/private_message.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type CreatePrivateMessage struct {
Content string `json:"content" url:"content,omitempty"`
RecipientID int `json:"recipient_id" url:"recipient_id,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type EditPrivateMessage struct {
PrivateMessageID int `json:"private_message_id" url:"private_message_id,omitempty"`
Content string `json:"content" url:"content,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type DeletePrivateMessage struct {
PrivateMessageID int `json:"private_message_id" url:"private_message_id,omitempty"`
Deleted bool `json:"deleted" url:"deleted,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type MarkPrivateMessageAsRead struct {
PrivateMessageID int `json:"private_message_id" url:"private_message_id,omitempty"`
Read bool `json:"read" url:"read,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type GetPrivateMessages struct {
UnreadOnly Optional[bool] `json:"unread_only" url:"unread_only,omitempty"`
Page Optional[int64] `json:"page" url:"page,omitempty"`
Limit Optional[int64] `json:"limit" url:"limit,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type PrivateMessagesResponse struct {
PrivateMessages []PrivateMessageView `json:"private_messages" url:"private_messages,omitempty"`
LemmyResponse
}
type PrivateMessageResponse struct {
PrivateMessageView PrivateMessageView `json:"private_message_view" url:"private_message_view,omitempty"`
LemmyResponse
}
type CreatePrivateMessageReport struct {
PrivateMessageID int `json:"private_message_id" url:"private_message_id,omitempty"`
Reason string `json:"reason" url:"reason,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type PrivateMessageReportResponse struct {
PrivateMessageReportView PrivateMessageReportView `json:"private_message_report_view" url:"private_message_report_view,omitempty"`
LemmyResponse
}
type ResolvePrivateMessageReport struct {
ReportID int `json:"report_id" url:"report_id,omitempty"`
Resolved bool `json:"resolved" url:"resolved,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type ListPrivateMessageReports struct {
Page Optional[int64] `json:"page" url:"page,omitempty"`
Limit Optional[int64] `json:"limit" url:"limit,omitempty"`
UnresolvedOnly Optional[bool] `json:"unresolved_only" url:"unresolved_only,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type ListPrivateMessageReportsResponse struct {
PrivateMessageReports []PrivateMessageReportView `json:"private_message_reports" url:"private_message_reports,omitempty"`
LemmyResponse
}

View File

@@ -0,0 +1,22 @@
// Source: lemmy/crates/db_schema/src/source/private_message_report.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type PrivateMessageReport struct {
ID int `json:"id" url:"id,omitempty"`
CreatorID int `json:"creator_id" url:"creator_id,omitempty"`
PrivateMessageID int `json:"private_message_id" url:"private_message_id,omitempty"`
OriginalPmText string `json:"original_pm_text" url:"original_pm_text,omitempty"`
Reason string `json:"reason" url:"reason,omitempty"`
Resolved bool `json:"resolved" url:"resolved,omitempty"`
ResolverID Optional[int] `json:"resolver_id" url:"resolver_id,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
}
type PrivateMessageReportForm struct {
CreatorID int `json:"creator_id" url:"creator_id,omitempty"`
PrivateMessageID int `json:"private_message_id" url:"private_message_id,omitempty"`
OriginalPmText string `json:"original_pm_text" url:"original_pm_text,omitempty"`
Reason string `json:"reason" url:"reason,omitempty"`
}

View File

@@ -0,0 +1,21 @@
// Source: lemmy/crates/db_schema/src/source/registration_application.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type RegistrationApplication struct {
ID int32 `json:"id" url:"id,omitempty"`
LocalUserID int `json:"local_user_id" url:"local_user_id,omitempty"`
Answer string `json:"answer" url:"answer,omitempty"`
AdminID Optional[int] `json:"admin_id" url:"admin_id,omitempty"`
DenyReason Optional[string] `json:"deny_reason" url:"deny_reason,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
}
type RegistrationApplicationInsertForm struct {
LocalUserID int `json:"local_user_id" url:"local_user_id,omitempty"`
Answer string `json:"answer" url:"answer,omitempty"`
}
type RegistrationApplicationUpdateForm struct {
AdminID Optional[Optional[int]] `json:"admin_id" url:"admin_id,omitempty"`
DenyReason Optional[Optional[string]] `json:"deny_reason" url:"deny_reason,omitempty"`
}

4
types/request.gen.go Normal file
View File

@@ -0,0 +1,4 @@
// Source: lemmy/crates/api_common/src/request.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types

9
types/secret.gen.go Normal file
View File

@@ -0,0 +1,9 @@
// Source: lemmy/crates/db_schema/src/source/secret.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type Secret struct {
ID int32 `json:"id" url:"id,omitempty"`
JWTSecret string `json:"jwt_secret" url:"jwt_secret,omitempty"`
}

4
types/send.gen.go Normal file
View File

@@ -0,0 +1,4 @@
// Source: lemmy/crates/api_common/src/websocket/send.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types

4
types/sensitive.gen.go Normal file
View File

@@ -0,0 +1,4 @@
// Source: lemmy/crates/api_common/src/sensitive.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types

48
types/site.1.gen.go Normal file
View File

@@ -0,0 +1,48 @@
// Source: lemmy/crates/db_schema/src/source/site.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type Site struct {
ID int `json:"id" url:"id,omitempty"`
Name string `json:"name" url:"name,omitempty"`
Sidebar Optional[string] `json:"sidebar" url:"sidebar,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
Icon Optional[string] `json:"icon" url:"icon,omitempty"`
Banner Optional[string] `json:"banner" url:"banner,omitempty"`
Description Optional[string] `json:"description" url:"description,omitempty"`
ActorID string `json:"actor_id" url:"actor_id,omitempty"`
LastRefreshedAt LemmyTime `json:"last_refreshed_at" url:"last_refreshed_at,omitempty"`
InboxURL string `json:"inbox_url" url:"inbox_url,omitempty"`
PrivateKey Optional[string] `json:"private_key" url:"private_key,omitempty"`
PublicKey string `json:"public_key" url:"public_key,omitempty"`
InstanceID int `json:"instance_id" url:"instance_id,omitempty"`
}
type SiteInsertForm struct {
Name string `json:"name" url:"name,omitempty"`
Sidebar Optional[string] `json:"sidebar" url:"sidebar,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
Icon Optional[string] `json:"icon" url:"icon,omitempty"`
Banner Optional[string] `json:"banner" url:"banner,omitempty"`
Description Optional[string] `json:"description" url:"description,omitempty"`
ActorID Optional[string] `json:"actor_id" url:"actor_id,omitempty"`
LastRefreshedAt LemmyTime `json:"last_refreshed_at" url:"last_refreshed_at,omitempty"`
InboxURL Optional[string] `json:"inbox_url" url:"inbox_url,omitempty"`
PrivateKey Optional[string] `json:"private_key" url:"private_key,omitempty"`
PublicKey Optional[string] `json:"public_key" url:"public_key,omitempty"`
InstanceID int `json:"instance_id" url:"instance_id,omitempty"`
}
type SiteUpdateForm struct {
Name Optional[string] `json:"name" url:"name,omitempty"`
Sidebar Optional[Optional[string]] `json:"sidebar" url:"sidebar,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
Icon Optional[Optional[string]] `json:"icon" url:"icon,omitempty"`
Banner Optional[Optional[string]] `json:"banner" url:"banner,omitempty"`
Description Optional[Optional[string]] `json:"description" url:"description,omitempty"`
ActorID Optional[string] `json:"actor_id" url:"actor_id,omitempty"`
LastRefreshedAt LemmyTime `json:"last_refreshed_at" url:"last_refreshed_at,omitempty"`
InboxURL Optional[string] `json:"inbox_url" url:"inbox_url,omitempty"`
PrivateKey Optional[Optional[string]] `json:"private_key" url:"private_key,omitempty"`
PublicKey Optional[string] `json:"public_key" url:"public_key,omitempty"`
}

235
types/site.gen.go Normal file
View File

@@ -0,0 +1,235 @@
// Source: lemmy/crates/api_common/src/site.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type Search struct {
Q string `json:"q" url:"q,omitempty"`
CommunityID Optional[int] `json:"community_id" url:"community_id,omitempty"`
CommunityName Optional[string] `json:"community_name" url:"community_name,omitempty"`
CreatorID Optional[int] `json:"creator_id" url:"creator_id,omitempty"`
Type Optional[SearchType] `json:"type_" url:"type_,omitempty"`
Sort Optional[SortType] `json:"sort" url:"sort,omitempty"`
ListingType Optional[ListingType] `json:"listing_type" url:"listing_type,omitempty"`
Page Optional[int64] `json:"page" url:"page,omitempty"`
Limit Optional[int64] `json:"limit" url:"limit,omitempty"`
Auth Optional[string] `json:"auth" url:"auth,omitempty"`
}
type SearchResponse struct {
Type string `json:"type_" url:"type_,omitempty"`
Comments []CommentView `json:"comments" url:"comments,omitempty"`
Posts []PostView `json:"posts" url:"posts,omitempty"`
Communities []CommunityView `json:"communities" url:"communities,omitempty"`
Users []PersonViewSafe `json:"users" url:"users,omitempty"`
LemmyResponse
}
type ResolveObject struct {
Q string `json:"q" url:"q,omitempty"`
Auth Optional[string] `json:"auth" url:"auth,omitempty"`
}
type ResolveObjectResponse struct {
Comment Optional[CommentView] `json:"comment" url:"comment,omitempty"`
Post Optional[PostView] `json:"post" url:"post,omitempty"`
Community Optional[CommunityView] `json:"community" url:"community,omitempty"`
Person Optional[PersonViewSafe] `json:"person" url:"person,omitempty"`
LemmyResponse
}
type GetModlog struct {
ModPersonID Optional[int] `json:"mod_person_id" url:"mod_person_id,omitempty"`
CommunityID Optional[int] `json:"community_id" url:"community_id,omitempty"`
Page Optional[int64] `json:"page" url:"page,omitempty"`
Limit Optional[int64] `json:"limit" url:"limit,omitempty"`
Auth Optional[string] `json:"auth" url:"auth,omitempty"`
Type Optional[ModlogActionType] `json:"type_" url:"type_,omitempty"`
OtherPersonID Optional[int] `json:"other_person_id" url:"other_person_id,omitempty"`
}
type GetModlogResponse struct {
RemovedPosts []ModRemovePostView `json:"removed_posts" url:"removed_posts,omitempty"`
LockedPosts []ModLockPostView `json:"locked_posts" url:"locked_posts,omitempty"`
FeaturedPosts []ModFeaturePostView `json:"featured_posts" url:"featured_posts,omitempty"`
RemovedComments []ModRemoveCommentView `json:"removed_comments" url:"removed_comments,omitempty"`
RemovedCommunities []ModRemoveCommunityView `json:"removed_communities" url:"removed_communities,omitempty"`
BannedFromCommunity []ModBanFromCommunityView `json:"banned_from_community" url:"banned_from_community,omitempty"`
Banned []ModBanView `json:"banned" url:"banned,omitempty"`
AddedToCommunity []ModAddCommunityView `json:"added_to_community" url:"added_to_community,omitempty"`
TransferredToCommunity []ModTransferCommunityView `json:"transferred_to_community" url:"transferred_to_community,omitempty"`
Added []ModAddView `json:"added" url:"added,omitempty"`
AdminPurgedPersons []AdminPurgePersonView `json:"admin_purged_persons" url:"admin_purged_persons,omitempty"`
AdminPurgedCommunities []AdminPurgeCommunityView `json:"admin_purged_communities" url:"admin_purged_communities,omitempty"`
AdminPurgedPosts []AdminPurgePostView `json:"admin_purged_posts" url:"admin_purged_posts,omitempty"`
AdminPurgedComments []AdminPurgeCommentView `json:"admin_purged_comments" url:"admin_purged_comments,omitempty"`
HiddenCommunities []ModHideCommunityView `json:"hidden_communities" url:"hidden_communities,omitempty"`
LemmyResponse
}
type CreateSite struct {
Name string `json:"name" url:"name,omitempty"`
Sidebar Optional[string] `json:"sidebar" url:"sidebar,omitempty"`
Description Optional[string] `json:"description" url:"description,omitempty"`
Icon Optional[string] `json:"icon" url:"icon,omitempty"`
Banner Optional[string] `json:"banner" url:"banner,omitempty"`
EnableDownvotes Optional[bool] `json:"enable_downvotes" url:"enable_downvotes,omitempty"`
EnableNSFW Optional[bool] `json:"enable_nsfw" url:"enable_nsfw,omitempty"`
CommunityCreationAdminOnly Optional[bool] `json:"community_creation_admin_only" url:"community_creation_admin_only,omitempty"`
RequireEmailVerification Optional[bool] `json:"require_email_verification" url:"require_email_verification,omitempty"`
ApplicationQuestion Optional[string] `json:"application_question" url:"application_question,omitempty"`
PrivateInstance Optional[bool] `json:"private_instance" url:"private_instance,omitempty"`
DefaultTheme Optional[string] `json:"default_theme" url:"default_theme,omitempty"`
DefaultPostListingType Optional[string] `json:"default_post_listing_type" url:"default_post_listing_type,omitempty"`
LegalInformation Optional[string] `json:"legal_information" url:"legal_information,omitempty"`
ApplicationEmailAdmins Optional[bool] `json:"application_email_admins" url:"application_email_admins,omitempty"`
HideModlogModNames Optional[bool] `json:"hide_modlog_mod_names" url:"hide_modlog_mod_names,omitempty"`
DiscussionLanguages Optional[[]int] `json:"discussion_languages" url:"discussion_languages,omitempty"`
SlurFilterRegex Optional[string] `json:"slur_filter_regex" url:"slur_filter_regex,omitempty"`
ActorNameMaxLength Optional[int32] `json:"actor_name_max_length" url:"actor_name_max_length,omitempty"`
RateLimitMessage Optional[int32] `json:"rate_limit_message" url:"rate_limit_message,omitempty"`
RateLimitMessagePerSecond Optional[int32] `json:"rate_limit_message_per_second" url:"rate_limit_message_per_second,omitempty"`
RateLimitPost Optional[int32] `json:"rate_limit_post" url:"rate_limit_post,omitempty"`
RateLimitPostPerSecond Optional[int32] `json:"rate_limit_post_per_second" url:"rate_limit_post_per_second,omitempty"`
RateLimitRegister Optional[int32] `json:"rate_limit_register" url:"rate_limit_register,omitempty"`
RateLimitRegisterPerSecond Optional[int32] `json:"rate_limit_register_per_second" url:"rate_limit_register_per_second,omitempty"`
RateLimitImage Optional[int32] `json:"rate_limit_image" url:"rate_limit_image,omitempty"`
RateLimitImagePerSecond Optional[int32] `json:"rate_limit_image_per_second" url:"rate_limit_image_per_second,omitempty"`
RateLimitComment Optional[int32] `json:"rate_limit_comment" url:"rate_limit_comment,omitempty"`
RateLimitCommentPerSecond Optional[int32] `json:"rate_limit_comment_per_second" url:"rate_limit_comment_per_second,omitempty"`
RateLimitSearch Optional[int32] `json:"rate_limit_search" url:"rate_limit_search,omitempty"`
RateLimitSearchPerSecond Optional[int32] `json:"rate_limit_search_per_second" url:"rate_limit_search_per_second,omitempty"`
FederationEnabled Optional[bool] `json:"federation_enabled" url:"federation_enabled,omitempty"`
FederationDebug Optional[bool] `json:"federation_debug" url:"federation_debug,omitempty"`
FederationWorkerCount Optional[int32] `json:"federation_worker_count" url:"federation_worker_count,omitempty"`
CaptchaEnabled Optional[bool] `json:"captcha_enabled" url:"captcha_enabled,omitempty"`
CaptchaDifficulty Optional[string] `json:"captcha_difficulty" url:"captcha_difficulty,omitempty"`
AllowedInstances Optional[[]string] `json:"allowed_instances" url:"allowed_instances,omitempty"`
BlockedInstances Optional[[]string] `json:"blocked_instances" url:"blocked_instances,omitempty"`
Taglines Optional[[]string] `json:"taglines" url:"taglines,omitempty"`
RegistrationMode Optional[RegistrationMode] `json:"registration_mode" url:"registration_mode,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type EditSite struct {
Name Optional[string] `json:"name" url:"name,omitempty"`
Sidebar Optional[string] `json:"sidebar" url:"sidebar,omitempty"`
Description Optional[string] `json:"description" url:"description,omitempty"`
Icon Optional[string] `json:"icon" url:"icon,omitempty"`
Banner Optional[string] `json:"banner" url:"banner,omitempty"`
EnableDownvotes Optional[bool] `json:"enable_downvotes" url:"enable_downvotes,omitempty"`
EnableNSFW Optional[bool] `json:"enable_nsfw" url:"enable_nsfw,omitempty"`
CommunityCreationAdminOnly Optional[bool] `json:"community_creation_admin_only" url:"community_creation_admin_only,omitempty"`
RequireEmailVerification Optional[bool] `json:"require_email_verification" url:"require_email_verification,omitempty"`
ApplicationQuestion Optional[string] `json:"application_question" url:"application_question,omitempty"`
PrivateInstance Optional[bool] `json:"private_instance" url:"private_instance,omitempty"`
DefaultTheme Optional[string] `json:"default_theme" url:"default_theme,omitempty"`
DefaultPostListingType Optional[string] `json:"default_post_listing_type" url:"default_post_listing_type,omitempty"`
LegalInformation Optional[string] `json:"legal_information" url:"legal_information,omitempty"`
ApplicationEmailAdmins Optional[bool] `json:"application_email_admins" url:"application_email_admins,omitempty"`
HideModlogModNames Optional[bool] `json:"hide_modlog_mod_names" url:"hide_modlog_mod_names,omitempty"`
DiscussionLanguages Optional[[]int] `json:"discussion_languages" url:"discussion_languages,omitempty"`
SlurFilterRegex Optional[string] `json:"slur_filter_regex" url:"slur_filter_regex,omitempty"`
ActorNameMaxLength Optional[int32] `json:"actor_name_max_length" url:"actor_name_max_length,omitempty"`
RateLimitMessage Optional[int32] `json:"rate_limit_message" url:"rate_limit_message,omitempty"`
RateLimitMessagePerSecond Optional[int32] `json:"rate_limit_message_per_second" url:"rate_limit_message_per_second,omitempty"`
RateLimitPost Optional[int32] `json:"rate_limit_post" url:"rate_limit_post,omitempty"`
RateLimitPostPerSecond Optional[int32] `json:"rate_limit_post_per_second" url:"rate_limit_post_per_second,omitempty"`
RateLimitRegister Optional[int32] `json:"rate_limit_register" url:"rate_limit_register,omitempty"`
RateLimitRegisterPerSecond Optional[int32] `json:"rate_limit_register_per_second" url:"rate_limit_register_per_second,omitempty"`
RateLimitImage Optional[int32] `json:"rate_limit_image" url:"rate_limit_image,omitempty"`
RateLimitImagePerSecond Optional[int32] `json:"rate_limit_image_per_second" url:"rate_limit_image_per_second,omitempty"`
RateLimitComment Optional[int32] `json:"rate_limit_comment" url:"rate_limit_comment,omitempty"`
RateLimitCommentPerSecond Optional[int32] `json:"rate_limit_comment_per_second" url:"rate_limit_comment_per_second,omitempty"`
RateLimitSearch Optional[int32] `json:"rate_limit_search" url:"rate_limit_search,omitempty"`
RateLimitSearchPerSecond Optional[int32] `json:"rate_limit_search_per_second" url:"rate_limit_search_per_second,omitempty"`
FederationEnabled Optional[bool] `json:"federation_enabled" url:"federation_enabled,omitempty"`
FederationDebug Optional[bool] `json:"federation_debug" url:"federation_debug,omitempty"`
FederationWorkerCount Optional[int32] `json:"federation_worker_count" url:"federation_worker_count,omitempty"`
CaptchaEnabled Optional[bool] `json:"captcha_enabled" url:"captcha_enabled,omitempty"`
CaptchaDifficulty Optional[string] `json:"captcha_difficulty" url:"captcha_difficulty,omitempty"`
AllowedInstances Optional[[]string] `json:"allowed_instances" url:"allowed_instances,omitempty"`
BlockedInstances Optional[[]string] `json:"blocked_instances" url:"blocked_instances,omitempty"`
Taglines Optional[[]string] `json:"taglines" url:"taglines,omitempty"`
RegistrationMode Optional[RegistrationMode] `json:"registration_mode" url:"registration_mode,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type GetSite struct {
Auth Optional[string] `json:"auth" url:"auth,omitempty"`
}
type SiteResponse struct {
SiteView SiteView `json:"site_view" url:"site_view,omitempty"`
LemmyResponse
}
type GetSiteResponse struct {
SiteView SiteView `json:"site_view" url:"site_view,omitempty"`
Admins []PersonViewSafe `json:"admins" url:"admins,omitempty"`
Online uint `json:"online" url:"online,omitempty"`
Version string `json:"version" url:"version,omitempty"`
MyUser Optional[MyUserInfo] `json:"my_user" url:"my_user,omitempty"`
FederatedInstances Optional[FederatedInstances] `json:"federated_instances" url:"federated_instances,omitempty"`
AllLanguages []Language `json:"all_languages" url:"all_languages,omitempty"`
DiscussionLanguages []int `json:"discussion_languages" url:"discussion_languages,omitempty"`
Taglines Optional[[]Tagline] `json:"taglines" url:"taglines,omitempty"`
LemmyResponse
}
type MyUserInfo struct {
LocalUserView LocalUserSettingsView `json:"local_user_view" url:"local_user_view,omitempty"`
Follows []CommunityFollowerView `json:"follows" url:"follows,omitempty"`
Moderates []CommunityModeratorView `json:"moderates" url:"moderates,omitempty"`
CommunityBlocks []CommunityBlockView `json:"community_blocks" url:"community_blocks,omitempty"`
PersonBlocks []PersonBlockView `json:"person_blocks" url:"person_blocks,omitempty"`
DiscussionLanguages []int `json:"discussion_languages" url:"discussion_languages,omitempty"`
}
type LeaveAdmin struct {
Auth string `json:"auth" url:"auth,omitempty"`
}
type FederatedInstances struct {
Linked []string `json:"linked" url:"linked,omitempty"`
Allowed Optional[[]string] `json:"allowed" url:"allowed,omitempty"`
Blocked Optional[[]string] `json:"blocked" url:"blocked,omitempty"`
}
type PurgePerson struct {
PersonID int `json:"person_id" url:"person_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type PurgeCommunity struct {
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type PurgePost struct {
PostID int `json:"post_id" url:"post_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type PurgeComment struct {
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
Reason Optional[string] `json:"reason" url:"reason,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type PurgeItemResponse struct {
Success bool `json:"success" url:"success,omitempty"`
LemmyResponse
}
type ListRegistrationApplications struct {
UnreadOnly Optional[bool] `json:"unread_only" url:"unread_only,omitempty"`
Page Optional[int64] `json:"page" url:"page,omitempty"`
Limit Optional[int64] `json:"limit" url:"limit,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type ListRegistrationApplicationsResponse struct {
RegistrationApplications []RegistrationApplicationView `json:"registration_applications" url:"registration_applications,omitempty"`
LemmyResponse
}
type ApproveRegistrationApplication struct {
ID int32 `json:"id" url:"id,omitempty"`
Approve bool `json:"approve" url:"approve,omitempty"`
DenyReason Optional[string] `json:"deny_reason" url:"deny_reason,omitempty"`
Auth string `json:"auth" url:"auth,omitempty"`
}
type RegistrationApplicationResponse struct {
RegistrationApplication RegistrationApplicationView `json:"registration_application" url:"registration_application,omitempty"`
LemmyResponse
}
type GetUnreadRegistrationApplicationCount struct {
Auth string `json:"auth" url:"auth,omitempty"`
}
type GetUnreadRegistrationApplicationCountResponse struct {
RegistrationApplications int64 `json:"registration_applications" url:"registration_applications,omitempty"`
LemmyResponse
}

View File

@@ -1,256 +0,0 @@
package types
type Search struct {
CommunityID Optional[int] `json:"community_id" url:"community_id"`
CommunityName Optional[string] `json:"community_name" url:"community_name"`
CreatorID Optional[int] `json:"creator_id" url:"creator_id"`
Limit Optional[int] `json:"limit" url:"limit"`
ListingType Optional[ListingType] `json:"listing_type" url:"listing_type"`
Page Optional[int] `json:"page" url:"page"`
Query string `json:"q" url:"q"`
Sort Optional[SortType] `json:"sort" url:"sort"`
Type Optional[SearchType] `json:"type_" url:"type_"`
}
type SearchResponse struct {
Type string `json:"type,omitempty" url:"type,omitempty"`
Comments []CommentView `json:"comments,omitempty" url:"comments,omitempty"`
Posts []PostView `json:"posts,omitempty" url:"posts,omitempty"`
Communities []CommunityView `json:"communities,omitempty" url:"communities,omitempty"`
Users []PersonViewSafe `json:"users,omitempty" url:"users,omitempty"`
LemmyResponse
}
type ResolveObject struct {
Q string `json:"q,omitempty" url:"q,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type ResolveObjectResponse struct {
Comment Optional[CommentView] `json:"comment,omitempty" url:"comment,omitempty"`
Post Optional[PostView] `json:"post,omitempty" url:"post,omitempty"`
Community Optional[CommunityView] `json:"community,omitempty" url:"community,omitempty"`
Person Optional[PersonViewSafe] `json:"person,omitempty" url:"person,omitempty"`
LemmyResponse
}
type GetModlog struct {
ModPersonID Optional[int] `json:"mod_person_id,omitempty" url:"mod_person_id,omitempty"`
CommunityID Optional[int] `json:"community_id,omitempty" url:"community_id,omitempty"`
Page Optional[int64] `json:"page,omitempty" url:"page,omitempty"`
Limit Optional[int64] `json:"limit,omitempty" url:"limit,omitempty"`
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
Type Optional[ModlogActionType] `json:"type,omitempty" url:"type,omitempty"`
OtherPersonID Optional[int] `json:"other_person_id,omitempty" url:"other_person_id,omitempty"`
}
type GetModlogResponse struct {
RemovedPosts []ModRemovePostView `json:"removed_posts,omitempty" url:"removed_posts,omitempty"`
LockedPosts []ModLockPostView `json:"locked_posts,omitempty" url:"locked_posts,omitempty"`
StickiedPosts []ModStickyPostView `json:"stickied_posts,omitempty" url:"stickied_posts,omitempty"`
RemovedComments []ModRemoveCommentView `json:"removed_comments,omitempty" url:"removed_comments,omitempty"`
RemovedCommunities []ModRemoveCommunityView `json:"removed_communities,omitempty" url:"removed_communities,omitempty"`
BannedFromCommunity []ModBanFromCommunityView `json:"banned_from_community,omitempty" url:"banned_from_community,omitempty"`
Banned []ModBanView `json:"banned,omitempty" url:"banned,omitempty"`
AddedToCommunity []ModAddCommunityView `json:"added_to_community,omitempty" url:"added_to_community,omitempty"`
TransferredToCommunity []ModTransferCommunityView `json:"transferred_to_community,omitempty" url:"transferred_to_community,omitempty"`
Added []ModAddView `json:"added,omitempty" url:"added,omitempty"`
AdminPurgedPersons []AdminPurgePersonView `json:"admin_purged_persons,omitempty" url:"admin_purged_persons,omitempty"`
AdminPurgedCommunities []AdminPurgeCommunityView `json:"admin_purged_communities,omitempty" url:"admin_purged_communities,omitempty"`
AdminPurgedPosts []AdminPurgePostView `json:"admin_purged_posts,omitempty" url:"admin_purged_posts,omitempty"`
AdminPurgedComments []AdminPurgeCommentView `json:"admin_purged_comments,omitempty" url:"admin_purged_comments,omitempty"`
HiddenCommunities []ModHideCommunityView `json:"hidden_communities,omitempty" url:"hidden_communities,omitempty"`
LemmyResponse
}
type CreateSite struct {
Name string `json:"name,omitempty" url:"name,omitempty"`
Sidebar Optional[string] `json:"sidebar,omitempty" url:"sidebar,omitempty"`
Description Optional[string] `json:"description,omitempty" url:"description,omitempty"`
Icon Optional[string] `json:"icon,omitempty" url:"icon,omitempty"`
Banner Optional[string] `json:"banner,omitempty" url:"banner,omitempty"`
EnableDownvotes Optional[bool] `json:"enable_downvotes,omitempty" url:"enable_downvotes,omitempty"`
OpenRegistration Optional[bool] `json:"open_registration,omitempty" url:"open_registration,omitempty"`
EnableNSFW Optional[bool] `json:"enable_nsfw,omitempty" url:"enable_nsfw,omitempty"`
CommunityCreationAdminOnly Optional[bool] `json:"community_creation_admin_only,omitempty" url:"community_creation_admin_only,omitempty"`
RequireEmailVerification Optional[bool] `json:"require_email_verification,omitempty" url:"require_email_verification,omitempty"`
RequireApplication Optional[bool] `json:"require_application,omitempty" url:"require_application,omitempty"`
ApplicationQuestion Optional[string] `json:"application_question,omitempty" url:"application_question,omitempty"`
PrivateInstance Optional[bool] `json:"private_instance,omitempty" url:"private_instance,omitempty"`
DefaultTheme Optional[string] `json:"default_theme,omitempty" url:"default_theme,omitempty"`
DefaultPostListingType Optional[string] `json:"default_post_listing_type,omitempty" url:"default_post_listing_type,omitempty"`
LegalInformation Optional[string] `json:"legal_information,omitempty" url:"legal_information,omitempty"`
ApplicationEmailAdmins Optional[bool] `json:"application_email_admins,omitempty" url:"application_email_admins,omitempty"`
HideModlogModNames Optional[bool] `json:"hide_modlog_mod_names,omitempty" url:"hide_modlog_mod_names,omitempty"`
DiscussionLanguages Optional[[]int] `json:"discussion_languages,omitempty" url:"discussion_languages,omitempty"`
SlurFilterRegex Optional[string] `json:"slur_filter_regex,omitempty" url:"slur_filter_regex,omitempty"`
ActorNameMaxLength Optional[int] `json:"actor_name_max_length,omitempty" url:"actor_name_max_length,omitempty"`
RateLimitMessage Optional[int] `json:"rate_limit_message,omitempty" url:"rate_limit_message,omitempty"`
RateLimitMessagePerSecond Optional[int] `json:"rate_limit_message_per_second,omitempty" url:"rate_limit_message_per_second,omitempty"`
RateLimitPost Optional[int] `json:"rate_limit_post,omitempty" url:"rate_limit_post,omitempty"`
RateLimitPostPerSecond Optional[int] `json:"rate_limit_post_per_second,omitempty" url:"rate_limit_post_per_second,omitempty"`
RateLimitRegister Optional[int] `json:"rate_limit_register,omitempty" url:"rate_limit_register,omitempty"`
RateLimitRegisterPerSecond Optional[int] `json:"rate_limit_register_per_second,omitempty" url:"rate_limit_register_per_second,omitempty"`
RateLimitImage Optional[int] `json:"rate_limit_image,omitempty" url:"rate_limit_image,omitempty"`
RateLimitImagePerSecond Optional[int] `json:"rate_limit_image_per_second,omitempty" url:"rate_limit_image_per_second,omitempty"`
RateLimitComment Optional[int] `json:"rate_limit_comment,omitempty" url:"rate_limit_comment,omitempty"`
RateLimitCommentPerSecond Optional[int] `json:"rate_limit_comment_per_second,omitempty" url:"rate_limit_comment_per_second,omitempty"`
RateLimitSearch Optional[int] `json:"rate_limit_search,omitempty" url:"rate_limit_search,omitempty"`
RateLimitSearchPerSecond Optional[int] `json:"rate_limit_search_per_second,omitempty" url:"rate_limit_search_per_second,omitempty"`
FederationEnabled Optional[bool] `json:"federation_enabled,omitempty" url:"federation_enabled,omitempty"`
FederationDebug Optional[bool] `json:"federation_debug,omitempty" url:"federation_debug,omitempty"`
FederationWorkerCount Optional[int] `json:"federation_worker_count,omitempty" url:"federation_worker_count,omitempty"`
CaptchaEnabled Optional[bool] `json:"captcha_enabled,omitempty" url:"captcha_enabled,omitempty"`
CaptchaDifficulty Optional[string] `json:"captcha_difficulty,omitempty" url:"captcha_difficulty,omitempty"`
AllowedInstances Optional[[]string] `json:"allowed_instances,omitempty" url:"allowed_instances,omitempty"`
BlockedInstances Optional[[]string] `json:"blocked_instances,omitempty" url:"blocked_instances,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type EditSite struct {
Name Optional[string] `json:"name,omitempty" url:"name,omitempty"`
Sidebar Optional[string] `json:"sidebar,omitempty" url:"sidebar,omitempty"`
Description Optional[string] `json:"description,omitempty" url:"description,omitempty"`
Icon Optional[string] `json:"icon,omitempty" url:"icon,omitempty"`
Banner Optional[string] `json:"banner,omitempty" url:"banner,omitempty"`
EnableDownvotes Optional[bool] `json:"enable_downvotes,omitempty" url:"enable_downvotes,omitempty"`
OpenRegistration Optional[bool] `json:"open_registration,omitempty" url:"open_registration,omitempty"`
EnableNSFW Optional[bool] `json:"enable_nsfw,omitempty" url:"enable_nsfw,omitempty"`
CommunityCreationAdminOnly Optional[bool] `json:"community_creation_admin_only,omitempty" url:"community_creation_admin_only,omitempty"`
RequireEmailVerification Optional[bool] `json:"require_email_verification,omitempty" url:"require_email_verification,omitempty"`
RequireApplication Optional[bool] `json:"require_application,omitempty" url:"require_application,omitempty"`
ApplicationQuestion Optional[string] `json:"application_question,omitempty" url:"application_question,omitempty"`
PrivateInstance Optional[bool] `json:"private_instance,omitempty" url:"private_instance,omitempty"`
DefaultTheme Optional[string] `json:"default_theme,omitempty" url:"default_theme,omitempty"`
DefaultPostListingType Optional[string] `json:"default_post_listing_type,omitempty" url:"default_post_listing_type,omitempty"`
LegalInformation Optional[string] `json:"legal_information,omitempty" url:"legal_information,omitempty"`
ApplicationEmailAdmins Optional[bool] `json:"application_email_admins,omitempty" url:"application_email_admins,omitempty"`
HideModlogModNames Optional[bool] `json:"hide_modlog_mod_names,omitempty" url:"hide_modlog_mod_names,omitempty"`
DiscussionLanguages Optional[[]int] `json:"discussion_languages,omitempty" url:"discussion_languages,omitempty"`
SlurFilterRegex Optional[string] `json:"slur_filter_regex,omitempty" url:"slur_filter_regex,omitempty"`
ActorNameMaxLength Optional[int] `json:"actor_name_max_length,omitempty" url:"actor_name_max_length,omitempty"`
RateLimitMessage Optional[int] `json:"rate_limit_message,omitempty" url:"rate_limit_message,omitempty"`
RateLimitMessagePerSecond Optional[int] `json:"rate_limit_message_per_second,omitempty" url:"rate_limit_message_per_second,omitempty"`
RateLimitPost Optional[int] `json:"rate_limit_post,omitempty" url:"rate_limit_post,omitempty"`
RateLimitPostPerSecond Optional[int] `json:"rate_limit_post_per_second,omitempty" url:"rate_limit_post_per_second,omitempty"`
RateLimitRegister Optional[int] `json:"rate_limit_register,omitempty" url:"rate_limit_register,omitempty"`
RateLimitRegisterPerSecond Optional[int] `json:"rate_limit_register_per_second,omitempty" url:"rate_limit_register_per_second,omitempty"`
RateLimitImage Optional[int] `json:"rate_limit_image,omitempty" url:"rate_limit_image,omitempty"`
RateLimitImagePerSecond Optional[int] `json:"rate_limit_image_per_second,omitempty" url:"rate_limit_image_per_second,omitempty"`
RateLimitComment Optional[int] `json:"rate_limit_comment,omitempty" url:"rate_limit_comment,omitempty"`
RateLimitCommentPerSecond Optional[int] `json:"rate_limit_comment_per_second,omitempty" url:"rate_limit_comment_per_second,omitempty"`
RateLimitSearch Optional[int] `json:"rate_limit_search,omitempty" url:"rate_limit_search,omitempty"`
RateLimitSearchPerSecond Optional[int] `json:"rate_limit_search_per_second,omitempty" url:"rate_limit_search_per_second,omitempty"`
FederationEnabled Optional[bool] `json:"federation_enabled,omitempty" url:"federation_enabled,omitempty"`
FederationDebug Optional[bool] `json:"federation_debug,omitempty" url:"federation_debug,omitempty"`
FederationWorkerCount Optional[int] `json:"federation_worker_count,omitempty" url:"federation_worker_count,omitempty"`
CaptchaEnabled Optional[bool] `json:"captcha_enabled,omitempty" url:"captcha_enabled,omitempty"`
CaptchaDifficulty Optional[string] `json:"captcha_difficulty,omitempty" url:"captcha_difficulty,omitempty"`
AllowedInstances Optional[[]string] `json:"allowed_instances,omitempty" url:"allowed_instances,omitempty"`
BlockedInstances Optional[[]string] `json:"blocked_instances,omitempty" url:"blocked_instances,omitempty"`
Taglines Optional[[]string] `json:"taglines,omitempty" url:"taglines,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type GetSite struct {
Auth Optional[string] `json:"auth,omitempty" url:"auth,omitempty"`
}
type SiteResponse struct {
SiteView SiteView `json:"site_view,omitempty" url:"site_view,omitempty"`
LemmyResponse
}
type GetSiteResponse struct {
SiteView SiteView `json:"site_view,omitempty" url:"site_view,omitempty"`
Admins []PersonViewSafe `json:"admins,omitempty" url:"admins,omitempty"`
Online int `json:"online,omitempty" url:"online,omitempty"`
Version string `json:"version,omitempty" url:"version,omitempty"`
MyUser Optional[MyUserInfo] `json:"my_user,omitempty" url:"my_user,omitempty"`
FederatedInstances Optional[FederatedInstances] `json:"federated_instances,omitempty" url:"federated_instances,omitempty"`
AllLanguages []Language `json:"all_languages,omitempty" url:"all_languages,omitempty"`
DiscussionLanguages []int `json:"discussion_languages,omitempty" url:"discussion_languages,omitempty"`
Taglines Optional[[]Tagline] `json:"taglines,omitempty" url:"taglines,omitempty"`
LemmyResponse
}
type MyUserInfo struct {
LocalUserView LocalUserSettingsView `json:"local_user_view,omitempty" url:"local_user_view,omitempty"`
Follows []CommunityFollowerView `json:"follows,omitempty" url:"follows,omitempty"`
Moderates []CommunityModeratorView `json:"moderates,omitempty" url:"moderates,omitempty"`
CommunityBlocks []CommunityBlockView `json:"community_blocks,omitempty" url:"community_blocks,omitempty"`
PersonBlocks []PersonBlockView `json:"person_blocks,omitempty" url:"person_blocks,omitempty"`
DiscussionLanguages []Language `json:"discussion_languages,omitempty" url:"discussion_languages,omitempty"`
}
type LeaveAdmin struct {
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type FederatedInstances struct {
Linked []string `json:"linked,omitempty" url:"linked,omitempty"`
Allowed Optional[[]string] `json:"allowed,omitempty" url:"allowed,omitempty"`
Blocked Optional[[]string] `json:"blocked,omitempty" url:"blocked,omitempty"`
}
type PurgePerson struct {
PersonID int `json:"person_id,omitempty" url:"person_id,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type PurgeCommunity struct {
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type PurgePost struct {
PostID int `json:"post_id,omitempty" url:"post_id,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type PurgeComment struct {
CommentID int `json:"comment_id,omitempty" url:"comment_id,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type PurgeItemResponse struct {
Success bool `json:"success,omitempty" url:"success,omitempty"`
LemmyResponse
}
type ListRegistrationApplications struct {
UnreadOnly Optional[bool] `json:"unread_only,omitempty" url:"unread_only,omitempty"`
Page Optional[int] `json:"page,omitempty" url:"page,omitempty"`
Limit Optional[int] `json:"limit,omitempty" url:"limit,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type ListRegistrationApplicationsResponse struct {
RegistrationApplications []RegistrationApplicationView `json:"registration_applications,omitempty" url:"registration_applications,omitempty"`
LemmyResponse
}
type ApproveRegistrationApplication struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
Approve bool `json:"approve,omitempty" url:"approve,omitempty"`
DenyReason Optional[string] `json:"deny_reason,omitempty" url:"deny_reason,omitempty"`
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type RegistrationApplicationResponse struct {
RegistrationApplication RegistrationApplicationView `json:"registration_application,omitempty" url:"registration_application,omitempty"`
LemmyResponse
}
type GetUnreadRegistrationApplicationCount struct {
Auth string `json:"auth,omitempty" url:"auth,omitempty"`
}
type GetUnreadRegistrationApplicationCountResponse struct {
RegistrationApplications int `json:"registration_applications,omitempty" url:"registration_applications,omitempty"`
LemmyResponse
}

View File

@@ -1,402 +0,0 @@
package types
import "time"
type LocalUserSettings struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
PersonID int `json:"person_id,omitempty" url:"person_id,omitempty"`
Email Optional[string] `json:"email,omitempty" url:"email,omitempty"`
ShowNSFW bool `json:"show_nsfw,omitempty" url:"show_nsfw,omitempty"`
Theme string `json:"theme,omitempty" url:"theme,omitempty"`
DefaultSortType int `json:"default_sort_type,omitempty" url:"default_sort_type,omitempty"`
DefaultListingType int `json:"default_listing_type,omitempty" url:"default_listing_type,omitempty"`
InterfaceLanguage string `json:"interface_language,omitempty" url:"interface_language,omitempty"`
ShowAvatars bool `json:"show_avatars,omitempty" url:"show_avatars,omitempty"`
SendNotifications bool `json:"send_notifications_to_email,omitempty" url:"send_notifications_to_email,omitempty"`
ValidatorTime string `json:"validator_time,omitempty" url:"validator_time,omitempty"`
ShowBotAccounts bool `json:"show_bot_accounts,omitempty" url:"show_bot_accounts,omitempty"`
ShowScores bool `json:"show_scores,omitempty" url:"show_scores,omitempty"`
ShowReadPosts bool `json:"show_read_posts,omitempty" url:"show_read_posts,omitempty"`
ShowNewPostNotifs bool `json:"show_new_post_notifs,omitempty" url:"show_new_post_notifs,omitempty"`
EmailVerified bool `json:"email_verified,omitempty" url:"email_verified,omitempty"`
AcceptedApplication bool `json:"accepted_application,omitempty" url:"accepted_application,omitempty"`
}
type PersonSafe struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
Name string `json:"name,omitempty" url:"name,omitempty"`
DisplayName Optional[string] `json:"display_name,omitempty" url:"display_name,omitempty"`
Avatar Optional[string] `json:"avatar,omitempty" url:"avatar,omitempty"`
Banned bool `json:"banned,omitempty" url:"banned,omitempty"`
Published string `json:"published,omitempty" url:"published,omitempty"`
Updated Optional[string] `json:"updated,omitempty" url:"updated,omitempty"`
ActorID string `json:"actor_id,omitempty" url:"actor_id,omitempty"`
Bio Optional[string] `json:"bio,omitempty" url:"bio,omitempty"`
Local bool `json:"local,omitempty" url:"local,omitempty"`
Banner Optional[string] `json:"banner,omitempty" url:"banner,omitempty"`
Deleted bool `json:"deleted,omitempty" url:"deleted,omitempty"`
InboxURL string `json:"inbox_url,omitempty" url:"inbox_url,omitempty"`
SharedInboxURL Optional[string] `json:"shared_inbox_url,omitempty" url:"shared_inbox_url,omitempty"`
MatrixUserID Optional[string] `json:"matrix_user_id,omitempty" url:"matrix_user_id,omitempty"`
Admin bool `json:"admin,omitempty" url:"admin,omitempty"`
BotAccount bool `json:"bot_account,omitempty" url:"bot_account,omitempty"`
BanExpires Optional[string] `json:"ban_expires,omitempty" url:"ban_expires,omitempty"`
InstanceID int `json:"instance_id,omitempty" url:"instance_id,omitempty"`
}
type Site struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
Name string `json:"name,omitempty" url:"name,omitempty"`
Sidebar Optional[string] `json:"sidebar,omitempty" url:"sidebar,omitempty"`
Published string `json:"published,omitempty" url:"published,omitempty"`
Updated Optional[string] `json:"updated,omitempty" url:"updated,omitempty"`
Icon Optional[string] `json:"icon,omitempty" url:"icon,omitempty"`
Banner Optional[string] `json:"banner,omitempty" url:"banner,omitempty"`
Description Optional[string] `json:"description,omitempty" url:"description,omitempty"`
ActorID string `json:"actor_id,omitempty" url:"actor_id,omitempty"`
LastRefreshedAt string `json:"last_refreshed_at,omitempty" url:"last_refreshed_at,omitempty"`
InboxURL string `json:"inbox_url,omitempty" url:"inbox_url,omitempty"`
PrivateKey Optional[string] `json:"private_key,omitempty" url:"private_key,omitempty"`
PublicKey string `json:"public_key,omitempty" url:"public_key,omitempty"`
InstanceID int `json:"instance_id,omitempty" url:"instance_id,omitempty"`
}
type LocalSite struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
SiteID int `json:"site_id,omitempty" url:"site_id,omitempty"`
SiteSetup bool `json:"site_setup,omitempty" url:"site_setup,omitempty"`
EnableDownvotes bool `json:"enable_downvotes,omitempty" url:"enable_downvotes,omitempty"`
OpenRegistration bool `json:"open_registration,omitempty" url:"open_registration,omitempty"`
EnableNSFW bool `json:"enable_nsfw,omitempty" url:"enable_nsfw,omitempty"`
AdminOnlyCommunityCreation bool `json:"community_creation_admin_only,omitempty" url:"community_creation_admin_only,omitempty"`
RequireEmailVerification bool `json:"require_email_verification,omitempty" url:"require_email_verification,omitempty"`
RequireApplication bool `json:"require_application,omitempty" url:"require_application,omitempty"`
ApplicationQuestion Optional[string] `json:"application_question,omitempty" url:"application_question,omitempty"`
PrivateInstance bool `json:"private_instance,omitempty" url:"private_instance,omitempty"`
DefaultTheme string `json:"default_theme,omitempty" url:"default_theme,omitempty"`
DefaultPostListingType string `json:"default_post_listing_type,omitempty" url:"default_post_listing_type,omitempty"`
LegalInformation Optional[string] `json:"legal_information,omitempty" url:"legal_information,omitempty"`
HideModlogModNames bool `json:"hide_modlog_mod_names,omitempty" url:"hide_modlog_mod_names,omitempty"`
ApplicationEmailAdmins bool `json:"application_email_admins,omitempty" url:"application_email_admins,omitempty"`
SlurFilterRegex Optional[string] `json:"slur_filter_regex,omitempty" url:"slur_filter_regex,omitempty"`
ActorNameMaxLength int `json:"actor_name_max_length,omitempty" url:"actor_name_max_length,omitempty"`
FederationEnabled bool `json:"federation_enabled,omitempty" url:"federation_enabled,omitempty"`
FederationDebug bool `json:"federation_debug,omitempty" url:"federation_debug,omitempty"`
FederationStrictAllowlist bool `json:"federation_strict_allowlist,omitempty" url:"federation_strict_allowlist,omitempty"`
FederationRetryLimit int `json:"federation_http_fetch_retry_limit,omitempty" url:"federation_http_fetch_retry_limit,omitempty"`
FederationWorkerCount int `json:"federation_worker_count,omitempty" url:"federation_worker_count,omitempty"`
CaptchaEnabled bool `json:"captcha_enabled,omitempty" url:"captcha_enabled,omitempty"`
CaptchaDifficulty string `json:"captcha_difficulty,omitempty" url:"captcha_difficulty,omitempty"`
Published string `json:"published,omitempty" url:"published,omitempty"`
Updated Optional[string] `json:"updated,omitempty" url:"updated,omitempty"`
}
type LocalSiteRateLimit struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
LocalSiteID int `json:"local_site_id,omitempty" url:"local_site_id,omitempty"`
Message int `json:"message,omitempty" url:"message,omitempty"`
MessagePerSecond int `json:"message_per_second,omitempty" url:"message_per_second,omitempty"`
Post int `json:"post,omitempty" url:"post,omitempty"`
PostPerSecond int `json:"post_per_second,omitempty" url:"post_per_second,omitempty"`
Register int `json:"register,omitempty" url:"register,omitempty"`
RegisterPerSecond int `json:"register_per_second,omitempty" url:"register_per_second,omitempty"`
Image int `json:"image,omitempty" url:"image,omitempty"`
ImagePerSecond int `json:"image_per_second,omitempty" url:"image_per_second,omitempty"`
Comment int `json:"comment,omitempty" url:"comment,omitempty"`
CommentPerSecond int `json:"comment_per_second,omitempty" url:"comment_per_second,omitempty"`
Search int `json:"search,omitempty" url:"search,omitempty"`
SearchPerSecond int `json:"search_per_second,omitempty" url:"search_per_second,omitempty"`
Published string `json:"published,omitempty" url:"published,omitempty"`
Updated Optional[string] `json:"updated,omitempty" url:"updated,omitempty"`
}
type PrivateMessage struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
CreatorID int `json:"creator_id,omitempty" url:"creator_id,omitempty"`
RecipientID int `json:"recipient_id,omitempty" url:"recipient_id,omitempty"`
Content string `json:"content,omitempty" url:"content,omitempty"`
Deleted bool `json:"deleted,omitempty" url:"deleted,omitempty"`
Read bool `json:"read,omitempty" url:"read,omitempty"`
Published string `json:"published,omitempty" url:"published,omitempty"`
Updated Optional[string] `json:"updated,omitempty" url:"updated,omitempty"`
ApID string `json:"ap_id,omitempty" url:"ap_id,omitempty"`
Local bool `json:"local,omitempty" url:"local,omitempty"`
}
type PostReport struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
CreatorID int `json:"creator_id,omitempty" url:"creator_id,omitempty"`
PostID int `json:"post_id,omitempty" url:"post_id,omitempty"`
OriginalPostName string `json:"original_post_name,omitempty" url:"original_post_name,omitempty"`
OriginalPostURL Optional[string] `json:"original_post_url,omitempty" url:"original_post_url,omitempty"`
OriginalPostBody Optional[string] `json:"original_post_body,omitempty" url:"original_post_body,omitempty"`
Reason string `json:"reason,omitempty" url:"reason,omitempty"`
Resolved bool `json:"resolved,omitempty" url:"resolved,omitempty"`
ResolverID Optional[int] `json:"resolver_id,omitempty" url:"resolver_id,omitempty"`
Published string `json:"published,omitempty" url:"published,omitempty"`
Updated Optional[string] `json:"updated,omitempty" url:"updated,omitempty"`
}
type Post struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
Name string `json:"name,omitempty" url:"name,omitempty"`
URL Optional[string] `json:"url,omitempty" url:"url,omitempty"`
Body Optional[string] `json:"body,omitempty" url:"body,omitempty"`
CreatorID int `json:"creator_id,omitempty" url:"creator_id,omitempty"`
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
Removed bool `json:"removed,omitempty" url:"removed,omitempty"`
Locked bool `json:"locked,omitempty" url:"locked,omitempty"`
Published string `json:"published,omitempty" url:"published,omitempty"`
Updated Optional[string] `json:"updated,omitempty" url:"updated,omitempty"`
Deleted bool `json:"deleted,omitempty" url:"deleted,omitempty"`
NSFW bool `json:"nsfw,omitempty" url:"nsfw,omitempty"`
Stickied bool `json:"stickied,omitempty" url:"stickied,omitempty"`
EmbedTitle Optional[string] `json:"embed_title,omitempty" url:"embed_title,omitempty"`
EmbedDescription Optional[string] `json:"embed_description,omitempty" url:"embed_description,omitempty"`
EmbedVideoURL Optional[string] `json:"embed_video_url,omitempty" url:"embed_video_url,omitempty"`
ThumbnailURL Optional[string] `json:"thumbnail_url,omitempty" url:"thumbnail_url,omitempty"`
ApID string `json:"ap_id,omitempty" url:"ap_id,omitempty"`
Local bool `json:"local,omitempty" url:"local,omitempty"`
LanguageID int `json:"language_id,omitempty" url:"language_id,omitempty"`
}
type PasswordResetRequest struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
LocalUserID int `json:"local_user_id,omitempty" url:"local_user_id,omitempty"`
TokenEncrypted string `json:"token_encrypted,omitempty" url:"token_encrypted,omitempty"`
Published string `json:"published,omitempty" url:"published,omitempty"`
}
type ModRemovePost struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id,omitempty" url:"mod_person_id,omitempty"`
PostID int `json:"post_id,omitempty" url:"post_id,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
Removed Optional[bool] `json:"removed,omitempty" url:"removed,omitempty"`
When string `json:"when_,omitempty" url:"when_,omitempty"`
}
type ModLockPost struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id,omitempty" url:"mod_person_id,omitempty"`
PostID int `json:"post_id,omitempty" url:"post_id,omitempty"`
Locked Optional[bool] `json:"locked,omitempty" url:"locked,omitempty"`
When string `json:"when_,omitempty" url:"when_,omitempty"`
}
// ModStickyPost represents a post stickied by a moderator.
type ModStickyPost struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id,omitempty" url:"mod_person_id,omitempty"`
PostID int `json:"post_id,omitempty" url:"post_id,omitempty"`
Stickied Optional[bool] `json:"stickied,omitempty" url:"stickied,omitempty"`
When string `json:"when_,omitempty" url:"when_,omitempty"`
}
// ModRemoveComment represents a comment removal by a moderator.
type ModRemoveComment struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id,omitempty" url:"mod_person_id,omitempty"`
CommentID int `json:"comment_id,omitempty" url:"comment_id,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
Removed Optional[bool] `json:"removed,omitempty" url:"removed,omitempty"`
When string `json:"when_,omitempty" url:"when_,omitempty"`
}
// ModRemoveCommunity represents a community removal by a moderator.
type ModRemoveCommunity struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id,omitempty" url:"mod_person_id,omitempty"`
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
Removed Optional[bool] `json:"removed,omitempty" url:"removed,omitempty"`
Expires Optional[string] `json:"expires,omitempty" url:"expires,omitempty"`
When string `json:"when_,omitempty" url:"when_,omitempty"`
}
// ModBanFromCommunity represents a user being banned from a community by a moderator.
type ModBanFromCommunity struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id,omitempty" url:"mod_person_id,omitempty"`
OtherPersonID int `json:"other_person_id,omitempty" url:"other_person_id,omitempty"`
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
Banned Optional[bool] `json:"banned,omitempty" url:"banned,omitempty"`
Expires Optional[string] `json:"expires,omitempty" url:"expires,omitempty"`
When string `json:"when_,omitempty" url:"when_,omitempty"`
}
// ModBan represents a user being banned by a moderator.
type ModBan struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id,omitempty" url:"mod_person_id,omitempty"`
OtherPersonID int `json:"other_person_id,omitempty" url:"other_person_id,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
Banned Optional[bool] `json:"banned,omitempty" url:"banned,omitempty"`
Expires Optional[string] `json:"expires,omitempty" url:"expires,omitempty"`
When string `json:"when_,omitempty" url:"when_,omitempty"`
}
// ModAddCommunity represents a user being added as a moderator of a community.
type ModAddCommunity struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id,omitempty" url:"mod_person_id,omitempty"`
OtherPersonID int `json:"other_person_id,omitempty" url:"other_person_id,omitempty"`
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
Removed Optional[bool] `json:"removed,omitempty" url:"removed,omitempty"`
When string `json:"when_,omitempty" url:"when_,omitempty"`
}
// ModTransferCommunity represents a community being transferred to another moderator.
type ModTransferCommunity struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id,omitempty" url:"mod_person_id,omitempty"`
OtherPersonID int `json:"other_person_id,omitempty" url:"other_person_id,omitempty"`
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
Removed Optional[bool] `json:"removed,omitempty" url:"removed,omitempty"`
When string `json:"when_,omitempty" url:"when_,omitempty"`
}
// ModAdd represents a user being added as a moderator.
type ModAdd struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
ModPersonID int `json:"mod_person_id,omitempty" url:"mod_person_id,omitempty"`
OtherPersonID int `json:"other_person_id,omitempty" url:"other_person_id,omitempty"`
Removed Optional[bool] `json:"removed,omitempty" url:"removed,omitempty"`
When string `json:"when_,omitempty" url:"when_,omitempty"`
}
type AdminPurgePerson struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
AdminPersonID int `json:"admin_person_id,omitempty" url:"admin_person_id,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
When string `json:"when_,omitempty" url:"when_,omitempty"`
}
type AdminPurgeCommunity struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
AdminPersonID int `json:"admin_person_id,omitempty" url:"admin_person_id,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
When string `json:"when_,omitempty" url:"when_,omitempty"`
}
type AdminPurgePost struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
AdminPersonID int `json:"admin_person_id,omitempty" url:"admin_person_id,omitempty"`
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
When string `json:"when_,omitempty" url:"when_,omitempty"`
}
type AdminPurgeComment struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
AdminPersonID int `json:"admin_person_id,omitempty" url:"admin_person_id,omitempty"`
PostID int `json:"post_id,omitempty" url:"post_id,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
When string `json:"when_,omitempty" url:"when_,omitempty"`
}
type CommunitySafe struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
Name string `json:"name,omitempty" url:"name,omitempty"`
Title string `json:"title,omitempty" url:"title,omitempty"`
Description Optional[string] `json:"description,omitempty" url:"description,omitempty"`
Removed bool `json:"removed,omitempty" url:"removed,omitempty"`
Published string `json:"published,omitempty" url:"published,omitempty"`
Updated Optional[string] `json:"updated,omitempty" url:"updated,omitempty"`
Deleted bool `json:"deleted,omitempty" url:"deleted,omitempty"`
NSFW bool `json:"nsfw,omitempty" url:"nsfw,omitempty"`
ActorID string `json:"actor_id,omitempty" url:"actor_id,omitempty"`
Local bool `json:"local,omitempty" url:"local,omitempty"`
Icon Optional[string] `json:"icon,omitempty" url:"icon,omitempty"`
Banner Optional[string] `json:"banner,omitempty" url:"banner,omitempty"`
Hidden bool `json:"hidden,omitempty" url:"hidden,omitempty"`
PostingRestrictedToMods bool `json:"posting_restricted_to_mods,omitempty" url:"posting_restricted_to_mods,omitempty"`
InstanceID int `json:"instance_id,omitempty" url:"instance_id,omitempty"`
}
type CommentReport struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
CreatorID int `json:"creator_id,omitempty" url:"creator_id,omitempty"`
CommentID int `json:"comment_id,omitempty" url:"comment_id,omitempty"`
OriginalCommentText string `json:"original_comment_text,omitempty" url:"original_comment_text,omitempty"`
Reason string `json:"reason,omitempty" url:"reason,omitempty"`
Resolved bool `json:"resolved,omitempty" url:"resolved,omitempty"`
ResolverID Optional[int] `json:"resolver_id,omitempty" url:"resolver_id,omitempty"`
Published string `json:"published,omitempty" url:"published,omitempty"`
Updated Optional[string] `json:"updated,omitempty" url:"updated,omitempty"`
}
type Comment struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
CreatorID int `json:"creator_id,omitempty" url:"creator_id,omitempty"`
PostID int `json:"post_id,omitempty" url:"post_id,omitempty"`
Content string `json:"content,omitempty" url:"content,omitempty"`
Removed bool `json:"removed,omitempty" url:"removed,omitempty"`
Published string `json:"published,omitempty" url:"published,omitempty"`
Updated Optional[string] `json:"updated,omitempty" url:"updated,omitempty"`
Deleted bool `json:"deleted,omitempty" url:"deleted,omitempty"`
APID string `json:"ap_id,omitempty" url:"ap_id,omitempty"`
Local bool `json:"local,omitempty" url:"local,omitempty"`
Path string `json:"path,omitempty" url:"path,omitempty"`
Distinguished bool `json:"distinguished,omitempty" url:"distinguished,omitempty"`
LanguageID int `json:"language_id,omitempty" url:"language_id,omitempty"`
}
type PersonMention struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
RecipientID int `json:"recipient_id,omitempty" url:"recipient_id,omitempty"`
CommentID int `json:"comment_id,omitempty" url:"comment_id,omitempty"`
Read bool `json:"read,omitempty" url:"read,omitempty"`
Published string `json:"published,omitempty" url:"published,omitempty"`
}
type Language struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
Code string `json:"code,omitempty" url:"code,omitempty"`
Name string `json:"name,omitempty" url:"name,omitempty"`
}
type PrivateMessageReport struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
CreatorID int `json:"creator_id,omitempty" url:"creator_id,omitempty"`
PrivateMessageID int `json:"private_message_id,omitempty" url:"private_message_id,omitempty"`
OriginalPMText string `json:"original_pm_text,omitempty" url:"original_pm_text,omitempty"`
Reason string `json:"reason,omitempty" url:"reason,omitempty"`
Resolved bool `json:"resolved,omitempty" url:"resolved,omitempty"`
ResolverID Optional[int] `json:"resolver_id,omitempty" url:"resolver_id,omitempty"`
Published string `json:"published,omitempty" url:"published,omitempty"`
Updated Optional[string] `json:"updated,omitempty" url:"updated,omitempty"`
}
type RegistrationApplication struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
LocalUserID int `json:"local_user_id,omitempty" url:"local_user_id,omitempty"`
Answer string `json:"answer,omitempty" url:"answer,omitempty"`
AdminID Optional[int] `json:"admin_id,omitempty" url:"admin_id,omitempty"`
DenyReason Optional[string] `json:"deny_reason,omitempty" url:"deny_reason,omitempty"`
Published string `json:"published,omitempty" url:"published,omitempty"`
}
type ModHideCommunityView struct {
ModHideCommunity ModHideCommunity `json:"mod_hide_community,omitempty" url:"mod_hide_community,omitempty"`
Admin Optional[PersonSafe] `json:"admin,omitempty" url:"admin,omitempty"`
Community CommunitySafe `json:"community,omitempty" url:"community,omitempty"`
}
type ModHideCommunity struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
CommunityID int `json:"community_id,omitempty" url:"community_id,omitempty"`
ModPersonID int `json:"mod_person_id,omitempty" url:"mod_person_id,omitempty"`
Reason Optional[string] `json:"reason,omitempty" url:"reason,omitempty"`
Hidden Optional[bool] `json:"hidden,omitempty" url:"hidden,omitempty"`
When time.Time `json:"when_,omitempty" url:"when_,omitempty"`
}
type CommentReply struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
RecipientID int `json:"recipient_id,omitempty" url:"recipient_id,omitempty"`
CommentID int `json:"comment_id,omitempty" url:"comment_id,omitempty"`
Read bool `json:"read,omitempty" url:"read,omitempty"`
Published string `json:"published,omitempty" url:"published,omitempty"`
}

63
types/structs.1.gen.go Normal file
View File

@@ -0,0 +1,63 @@
// Source: lemmy/crates/db_views_actor/src/structs.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type CommunityBlockView struct {
Person PersonSafe `json:"person" url:"person,omitempty"`
Community CommunitySafe `json:"community" url:"community,omitempty"`
}
type CommunityFollowerView struct {
Community CommunitySafe `json:"community" url:"community,omitempty"`
Follower PersonSafe `json:"follower" url:"follower,omitempty"`
}
type CommunityModeratorView struct {
Community CommunitySafe `json:"community" url:"community,omitempty"`
Moderator PersonSafe `json:"moderator" url:"moderator,omitempty"`
}
type CommunityPersonBanView struct {
Community CommunitySafe `json:"community" url:"community,omitempty"`
Person PersonSafe `json:"person" url:"person,omitempty"`
}
type CommunityView struct {
Community CommunitySafe `json:"community" url:"community,omitempty"`
Subscribed SubscribedType `json:"subscribed" url:"subscribed,omitempty"`
Blocked bool `json:"blocked" url:"blocked,omitempty"`
Counts CommunityAggregates `json:"counts" url:"counts,omitempty"`
}
type PersonBlockView struct {
Person PersonSafe `json:"person" url:"person,omitempty"`
Target PersonSafe `json:"target" url:"target,omitempty"`
}
type PersonMentionView struct {
PersonMention PersonMention `json:"person_mention" url:"person_mention,omitempty"`
Comment Comment `json:"comment" url:"comment,omitempty"`
Creator PersonSafe `json:"creator" url:"creator,omitempty"`
Post Post `json:"post" url:"post,omitempty"`
Community CommunitySafe `json:"community" url:"community,omitempty"`
Recipient PersonSafe `json:"recipient" url:"recipient,omitempty"`
Counts CommentAggregates `json:"counts" url:"counts,omitempty"`
CreatorBannedFromCommunity bool `json:"creator_banned_from_community" url:"creator_banned_from_community,omitempty"`
Subscribed SubscribedType `json:"subscribed" url:"subscribed,omitempty"`
Saved bool `json:"saved" url:"saved,omitempty"`
CreatorBlocked bool `json:"creator_blocked" url:"creator_blocked,omitempty"`
MyVote Optional[int16] `json:"my_vote" url:"my_vote,omitempty"`
}
type CommentReplyView struct {
CommentReply CommentReply `json:"comment_reply" url:"comment_reply,omitempty"`
Comment Comment `json:"comment" url:"comment,omitempty"`
Creator PersonSafe `json:"creator" url:"creator,omitempty"`
Post Post `json:"post" url:"post,omitempty"`
Community CommunitySafe `json:"community" url:"community,omitempty"`
Recipient PersonSafe `json:"recipient" url:"recipient,omitempty"`
Counts CommentAggregates `json:"counts" url:"counts,omitempty"`
CreatorBannedFromCommunity bool `json:"creator_banned_from_community" url:"creator_banned_from_community,omitempty"`
Subscribed SubscribedType `json:"subscribed" url:"subscribed,omitempty"`
Saved bool `json:"saved" url:"saved,omitempty"`
CreatorBlocked bool `json:"creator_blocked" url:"creator_blocked,omitempty"`
MyVote Optional[int16] `json:"my_vote" url:"my_vote,omitempty"`
}
type PersonViewSafe struct {
Person PersonSafe `json:"person" url:"person,omitempty"`
Counts PersonAggregates `json:"counts" url:"counts,omitempty"`
}

87
types/structs.2.gen.go Normal file
View File

@@ -0,0 +1,87 @@
// Source: lemmy/crates/db_views/src/structs.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type CommentReportView struct {
CommentReport CommentReport `json:"comment_report" url:"comment_report,omitempty"`
Comment Comment `json:"comment" url:"comment,omitempty"`
Post Post `json:"post" url:"post,omitempty"`
Community CommunitySafe `json:"community" url:"community,omitempty"`
Creator PersonSafe `json:"creator" url:"creator,omitempty"`
CommentCreator PersonSafe `json:"comment_creator" url:"comment_creator,omitempty"`
Counts CommentAggregates `json:"counts" url:"counts,omitempty"`
CreatorBannedFromCommunity bool `json:"creator_banned_from_community" url:"creator_banned_from_community,omitempty"`
MyVote Optional[int16] `json:"my_vote" url:"my_vote,omitempty"`
Resolver Optional[PersonSafe] `json:"resolver" url:"resolver,omitempty"`
}
type CommentView struct {
Comment Comment `json:"comment" url:"comment,omitempty"`
Creator PersonSafe `json:"creator" url:"creator,omitempty"`
Post Post `json:"post" url:"post,omitempty"`
Community CommunitySafe `json:"community" url:"community,omitempty"`
Counts CommentAggregates `json:"counts" url:"counts,omitempty"`
CreatorBannedFromCommunity bool `json:"creator_banned_from_community" url:"creator_banned_from_community,omitempty"`
Subscribed SubscribedType `json:"subscribed" url:"subscribed,omitempty"`
Saved bool `json:"saved" url:"saved,omitempty"`
CreatorBlocked bool `json:"creator_blocked" url:"creator_blocked,omitempty"`
MyVote Optional[int16] `json:"my_vote" url:"my_vote,omitempty"`
}
type LocalUserView struct {
LocalUser LocalUser `json:"local_user" url:"local_user,omitempty"`
Person Person `json:"person" url:"person,omitempty"`
Counts PersonAggregates `json:"counts" url:"counts,omitempty"`
}
type LocalUserSettingsView struct {
LocalUser LocalUserSettings `json:"local_user" url:"local_user,omitempty"`
Person PersonSafe `json:"person" url:"person,omitempty"`
Counts PersonAggregates `json:"counts" url:"counts,omitempty"`
}
type PostReportView struct {
PostReport PostReport `json:"post_report" url:"post_report,omitempty"`
Post Post `json:"post" url:"post,omitempty"`
Community CommunitySafe `json:"community" url:"community,omitempty"`
Creator PersonSafe `json:"creator" url:"creator,omitempty"`
PostCreator PersonSafe `json:"post_creator" url:"post_creator,omitempty"`
CreatorBannedFromCommunity bool `json:"creator_banned_from_community" url:"creator_banned_from_community,omitempty"`
MyVote Optional[int16] `json:"my_vote" url:"my_vote,omitempty"`
Counts PostAggregates `json:"counts" url:"counts,omitempty"`
Resolver Optional[PersonSafe] `json:"resolver" url:"resolver,omitempty"`
}
type PostView struct {
Post Post `json:"post" url:"post,omitempty"`
Creator PersonSafe `json:"creator" url:"creator,omitempty"`
Community CommunitySafe `json:"community" url:"community,omitempty"`
CreatorBannedFromCommunity bool `json:"creator_banned_from_community" url:"creator_banned_from_community,omitempty"`
Counts PostAggregates `json:"counts" url:"counts,omitempty"`
Subscribed SubscribedType `json:"subscribed" url:"subscribed,omitempty"`
Saved bool `json:"saved" url:"saved,omitempty"`
Read bool `json:"read" url:"read,omitempty"`
CreatorBlocked bool `json:"creator_blocked" url:"creator_blocked,omitempty"`
MyVote Optional[int16] `json:"my_vote" url:"my_vote,omitempty"`
UnreadComments int64 `json:"unread_comments" url:"unread_comments,omitempty"`
}
type PrivateMessageView struct {
PrivateMessage PrivateMessage `json:"private_message" url:"private_message,omitempty"`
Creator PersonSafe `json:"creator" url:"creator,omitempty"`
Recipient PersonSafe `json:"recipient" url:"recipient,omitempty"`
}
type PrivateMessageReportView struct {
PrivateMessageReport PrivateMessageReport `json:"private_message_report" url:"private_message_report,omitempty"`
PrivateMessage PrivateMessage `json:"private_message" url:"private_message,omitempty"`
PrivateMessageCreator PersonSafe `json:"private_message_creator" url:"private_message_creator,omitempty"`
Creator PersonSafe `json:"creator" url:"creator,omitempty"`
Resolver Optional[PersonSafe] `json:"resolver" url:"resolver,omitempty"`
}
type RegistrationApplicationView struct {
RegistrationApplication RegistrationApplication `json:"registration_application" url:"registration_application,omitempty"`
CreatorLocalUser LocalUserSettings `json:"creator_local_user" url:"creator_local_user,omitempty"`
Creator PersonSafe `json:"creator" url:"creator,omitempty"`
Admin Optional[PersonSafe] `json:"admin" url:"admin,omitempty"`
}
type SiteView struct {
Site Site `json:"site" url:"site,omitempty"`
LocalSite LocalSite `json:"local_site" url:"local_site,omitempty"`
LocalSiteRateLimit LocalSiteRateLimit `json:"local_site_rate_limit" url:"local_site_rate_limit,omitempty"`
Counts SiteAggregates `json:"counts" url:"counts,omitempty"`
}

95
types/structs.3.gen.go Normal file
View File

@@ -0,0 +1,95 @@
// Source: lemmy/crates/db_views_moderator/src/structs.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type ModAddCommunityView struct {
ModAddCommunity ModAddCommunity `json:"mod_add_community" url:"mod_add_community,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator" url:"moderator,omitempty"`
Community CommunitySafe `json:"community" url:"community,omitempty"`
ModdedPerson PersonSafe `json:"modded_person" url:"modded_person,omitempty"`
}
type ModAddView struct {
ModAdd ModAdd `json:"mod_add" url:"mod_add,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator" url:"moderator,omitempty"`
ModdedPerson PersonSafe `json:"modded_person" url:"modded_person,omitempty"`
}
type ModBanFromCommunityView struct {
ModBanFromCommunity ModBanFromCommunity `json:"mod_ban_from_community" url:"mod_ban_from_community,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator" url:"moderator,omitempty"`
Community CommunitySafe `json:"community" url:"community,omitempty"`
BannedPerson PersonSafe `json:"banned_person" url:"banned_person,omitempty"`
}
type ModBanView struct {
ModBan ModBan `json:"mod_ban" url:"mod_ban,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator" url:"moderator,omitempty"`
BannedPerson PersonSafe `json:"banned_person" url:"banned_person,omitempty"`
}
type ModHideCommunityView struct {
ModHideCommunity ModHideCommunity `json:"mod_hide_community" url:"mod_hide_community,omitempty"`
Admin Optional[PersonSafe] `json:"admin" url:"admin,omitempty"`
Community CommunitySafe `json:"community" url:"community,omitempty"`
}
type ModLockPostView struct {
ModLockPost ModLockPost `json:"mod_lock_post" url:"mod_lock_post,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator" url:"moderator,omitempty"`
Post Post `json:"post" url:"post,omitempty"`
Community CommunitySafe `json:"community" url:"community,omitempty"`
}
type ModRemoveCommentView struct {
ModRemoveComment ModRemoveComment `json:"mod_remove_comment" url:"mod_remove_comment,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator" url:"moderator,omitempty"`
Comment Comment `json:"comment" url:"comment,omitempty"`
Commenter PersonSafe `json:"commenter" url:"commenter,omitempty"`
Post Post `json:"post" url:"post,omitempty"`
Community CommunitySafe `json:"community" url:"community,omitempty"`
}
type ModRemoveCommunityView struct {
ModRemoveCommunity ModRemoveCommunity `json:"mod_remove_community" url:"mod_remove_community,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator" url:"moderator,omitempty"`
Community CommunitySafe `json:"community" url:"community,omitempty"`
}
type ModRemovePostView struct {
ModRemovePost ModRemovePost `json:"mod_remove_post" url:"mod_remove_post,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator" url:"moderator,omitempty"`
Post Post `json:"post" url:"post,omitempty"`
Community CommunitySafe `json:"community" url:"community,omitempty"`
}
type ModFeaturePostView struct {
ModFeaturePost ModFeaturePost `json:"mod_feature_post" url:"mod_feature_post,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator" url:"moderator,omitempty"`
Post Post `json:"post" url:"post,omitempty"`
Community CommunitySafe `json:"community" url:"community,omitempty"`
}
type ModTransferCommunityView struct {
ModTransferCommunity ModTransferCommunity `json:"mod_transfer_community" url:"mod_transfer_community,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator" url:"moderator,omitempty"`
Community CommunitySafe `json:"community" url:"community,omitempty"`
ModdedPerson PersonSafe `json:"modded_person" url:"modded_person,omitempty"`
}
type AdminPurgeCommentView struct {
AdminPurgeComment AdminPurgeComment `json:"admin_purge_comment" url:"admin_purge_comment,omitempty"`
Admin Optional[PersonSafe] `json:"admin" url:"admin,omitempty"`
Post Post `json:"post" url:"post,omitempty"`
}
type AdminPurgeCommunityView struct {
AdminPurgeCommunity AdminPurgeCommunity `json:"admin_purge_community" url:"admin_purge_community,omitempty"`
Admin Optional[PersonSafe] `json:"admin" url:"admin,omitempty"`
}
type AdminPurgePersonView struct {
AdminPurgePerson AdminPurgePerson `json:"admin_purge_person" url:"admin_purge_person,omitempty"`
Admin Optional[PersonSafe] `json:"admin" url:"admin,omitempty"`
}
type AdminPurgePostView struct {
AdminPurgePost AdminPurgePost `json:"admin_purge_post" url:"admin_purge_post,omitempty"`
Admin Optional[PersonSafe] `json:"admin" url:"admin,omitempty"`
Community CommunitySafe `json:"community" url:"community,omitempty"`
}
type ModlogListParams struct {
CommunityID Optional[int] `json:"community_id" url:"community_id,omitempty"`
ModPersonID Optional[int] `json:"mod_person_id" url:"mod_person_id,omitempty"`
OtherPersonID Optional[int] `json:"other_person_id" url:"other_person_id,omitempty"`
Page Optional[int64] `json:"page" url:"page,omitempty"`
Limit Optional[int64] `json:"limit" url:"limit,omitempty"`
HideModlogNames bool `json:"hide_modlog_names" url:"hide_modlog_names,omitempty"`
}

72
types/structs.4.gen.go Normal file
View File

@@ -0,0 +1,72 @@
// Source: lemmy/crates/db_schema/src/aggregates/structs.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type CommentAggregates struct {
ID int32 `json:"id" url:"id,omitempty"`
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
Score int64 `json:"score" url:"score,omitempty"`
Upvotes int64 `json:"upvotes" url:"upvotes,omitempty"`
Downvotes int64 `json:"downvotes" url:"downvotes,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
ChildCount int32 `json:"child_count" url:"child_count,omitempty"`
}
type CommunityAggregates struct {
ID int32 `json:"id" url:"id,omitempty"`
CommunityID int `json:"community_id" url:"community_id,omitempty"`
Subscribers int64 `json:"subscribers" url:"subscribers,omitempty"`
Posts int64 `json:"posts" url:"posts,omitempty"`
Comments int64 `json:"comments" url:"comments,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
UsersActiveDay int64 `json:"users_active_day" url:"users_active_day,omitempty"`
UsersActiveWeek int64 `json:"users_active_week" url:"users_active_week,omitempty"`
UsersActiveMonth int64 `json:"users_active_month" url:"users_active_month,omitempty"`
UsersActiveHalfYear int64 `json:"users_active_half_year" url:"users_active_half_year,omitempty"`
}
type PersonAggregates struct {
ID int32 `json:"id" url:"id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
PostCount int64 `json:"post_count" url:"post_count,omitempty"`
PostScore int64 `json:"post_score" url:"post_score,omitempty"`
CommentCount int64 `json:"comment_count" url:"comment_count,omitempty"`
CommentScore int64 `json:"comment_score" url:"comment_score,omitempty"`
}
type PostAggregates struct {
ID int32 `json:"id" url:"id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
Comments int64 `json:"comments" url:"comments,omitempty"`
Score int64 `json:"score" url:"score,omitempty"`
Upvotes int64 `json:"upvotes" url:"upvotes,omitempty"`
Downvotes int64 `json:"downvotes" url:"downvotes,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
NewestCommentTimeNecro LemmyTime `json:"newest_comment_time_necro" url:"newest_comment_time_necro,omitempty"`
NewestCommentTime LemmyTime `json:"newest_comment_time" url:"newest_comment_time,omitempty"`
FeaturedCommunity bool `json:"featured_community" url:"featured_community,omitempty"`
FeaturedLocal bool `json:"featured_local" url:"featured_local,omitempty"`
}
type PersonPostAggregates struct {
ID int32 `json:"id" url:"id,omitempty"`
PersonID int `json:"person_id" url:"person_id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
ReadComments int64 `json:"read_comments" url:"read_comments,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
}
type PersonPostAggregatesForm struct {
PersonID int `json:"person_id" url:"person_id,omitempty"`
PostID int `json:"post_id" url:"post_id,omitempty"`
ReadComments int64 `json:"read_comments" url:"read_comments,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
}
type SiteAggregates struct {
ID int32 `json:"id" url:"id,omitempty"`
SiteID int `json:"site_id" url:"site_id,omitempty"`
Users int64 `json:"users" url:"users,omitempty"`
Posts int64 `json:"posts" url:"posts,omitempty"`
Comments int64 `json:"comments" url:"comments,omitempty"`
Communities int64 `json:"communities" url:"communities,omitempty"`
UsersActiveDay int64 `json:"users_active_day" url:"users_active_day,omitempty"`
UsersActiveWeek int64 `json:"users_active_week" url:"users_active_week,omitempty"`
UsersActiveMonth int64 `json:"users_active_month" url:"users_active_month,omitempty"`
UsersActiveHalfYear int64 `json:"users_active_half_year" url:"users_active_half_year,omitempty"`
}

38
types/structs.gen.go Normal file
View File

@@ -0,0 +1,38 @@
// Source: lemmy/crates/api_common/src/websocket/structs.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type UserJoin struct {
Auth string `json:"auth" url:"auth,omitempty"`
}
type UserJoinResponse struct {
Joined bool `json:"joined" url:"joined,omitempty"`
LemmyResponse
}
type CommunityJoin struct {
CommunityID int `json:"community_id" url:"community_id,omitempty"`
}
type CommunityJoinResponse struct {
Joined bool `json:"joined" url:"joined,omitempty"`
LemmyResponse
}
type ModJoin struct {
CommunityID int `json:"community_id" url:"community_id,omitempty"`
}
type ModJoinResponse struct {
Joined bool `json:"joined" url:"joined,omitempty"`
LemmyResponse
}
type PostJoin struct {
PostID int `json:"post_id" url:"post_id,omitempty"`
}
type PostJoinResponse struct {
Joined bool `json:"joined" url:"joined,omitempty"`
LemmyResponse
}
type CaptchaItem struct {
Uuid string `json:"uuid" url:"uuid,omitempty"`
Answer string `json:"answer" url:"answer,omitempty"`
Expires LemmyTime `json:"expires" url:"expires,omitempty"`
}

17
types/tagline.gen.go Normal file
View File

@@ -0,0 +1,17 @@
// Source: lemmy/crates/db_schema/src/source/tagline.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type Tagline struct {
ID int32 `json:"id" url:"id,omitempty"`
LocalSiteID int `json:"local_site_id" url:"local_site_id,omitempty"`
Content string `json:"content" url:"content,omitempty"`
Published LemmyTime `json:"published" url:"published,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
}
type TaglineForm struct {
LocalSiteID int `json:"local_site_id" url:"local_site_id,omitempty"`
Content string `json:"content" url:"content,omitempty"`
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
}

View File

@@ -1,12 +1,14 @@
package types
import (
"encoding/json"
"fmt"
"net/http"
"time"
)
type LemmyResponse struct {
Error Optional[string] `json:"error,omitempty" url:"error,omitempty"`
Error Optional[string] `json:"error" url:"error,omitempty"`
}
type HTTPError struct {
@@ -25,3 +27,59 @@ type LemmyError struct {
func (le LemmyError) Error() string {
return fmt.Sprintf("%d %s: %s", le.Code, http.StatusText(le.Code), le.ErrStr)
}
type LemmyTime struct {
time.Time
}
func (lt *LemmyTime) UnmarshalJSON(b []byte) error {
var timeStr string
err := json.Unmarshal(b, &timeStr)
if err != nil {
return err
}
if timeStr == "" {
lt.Time = time.Unix(0, 0)
return nil
}
t, err := time.Parse("2006-01-02T15:04:05", timeStr)
if err != nil {
return err
}
lt.Time = t
return nil
}
type LemmyWebSocketMsg struct {
Op string `json:"op"`
Data json.RawMessage `json:"data"`
}
// IsOneOf checks if the message is one of the given operations.
func (msg LemmyWebSocketMsg) IsOneOf(ops ...Operation) bool {
for _, op := range ops {
if op.Operation() == msg.Op {
return true
}
}
return false
}
type Operation interface {
Operation() string
}
func (u UserOperation) Operation() string {
return string(u)
}
func (u UserOperationCRUD) Operation() string {
return string(u)
}
func (u UserOperationApub) Operation() string {
return string(u)
}

14
types/utils.gen.go Normal file
View File

@@ -0,0 +1,14 @@
// Source: lemmy/crates/api_common/src/utils.rs
// Code generated by go.arsenm.dev/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
package types
type EndpointType string
const (
EndpointTypeCommunity EndpointType = "Community"
EndpointTypePerson EndpointType = "Person"
EndpointTypePost EndpointType = "Post"
EndpointTypeComment EndpointType = "Comment"
EndpointTypePrivateMessage EndpointType = "PrivateMessage"
)

View File

@@ -1,254 +0,0 @@
package types
type PersonViewSafe struct {
Person PersonSafe `json:"person,omitempty" url:"person,omitempty"`
Counts PersonAggregates `json:"counts,omitempty" url:"counts,omitempty"`
}
type PersonMentionView struct {
PersonMention PersonMention `json:"person_mention,omitempty" url:"person_mention,omitempty"`
Comment Comment `json:"comment,omitempty" url:"comment,omitempty"`
Creator PersonSafe `json:"creator,omitempty" url:"creator,omitempty"`
Post Post `json:"post,omitempty" url:"post,omitempty"`
CommunitySafe CommunitySafe `json:"community_safe,omitempty" url:"community_safe,omitempty"`
Recipient PersonSafe `json:"recipient,omitempty" url:"recipient,omitempty"`
Counts CommentAggregates `json:"counts,omitempty" url:"counts,omitempty"`
CreatorBannedFromCommunity bool `json:"creator_banned_from_community,omitempty" url:"creator_banned_from_community,omitempty"`
Subscribed SubscribedType `json:"subscribed,omitempty" url:"subscribed,omitempty"`
Saved bool `json:"saved,omitempty" url:"saved,omitempty"`
CreatorBlocked bool `json:"creator_blocked,omitempty" url:"creator_blocked,omitempty"`
MyVote Optional[int] `json:"my_vote,omitempty" url:"my_vote,omitempty"`
}
type LocalUserSettingsView struct {
LocalUserSettings LocalUserSettings `json:"local_user_settings,omitempty" url:"local_user_settings,omitempty"`
Person PersonSafe `json:"person,omitempty" url:"person,omitempty"`
Counts PersonAggregates `json:"counts,omitempty" url:"counts,omitempty"`
}
type SiteView struct {
Site Site `json:"site,omitempty" url:"site,omitempty"`
LocalSite LocalSite `json:"local_site,omitempty" url:"local_site,omitempty"`
LocalSiteRateLimit LocalSiteRateLimit `json:"local_site_rate_limit,omitempty" url:"local_site_rate_limit,omitempty"`
Taglines Optional[[]Tagline] `json:"taglines,omitempty" url:"taglines,omitempty"`
Counts SiteAggregates `json:"counts,omitempty" url:"counts,omitempty"`
}
type PrivateMessageView struct {
PrivateMessage PrivateMessage `json:"private_message,omitempty" url:"private_message,omitempty"`
Creator PersonSafe `json:"creator,omitempty" url:"creator,omitempty"`
Recipient PersonSafe `json:"recipient,omitempty" url:"recipient,omitempty"`
}
type PostView struct {
Post Post `json:"post,omitempty" url:"post,omitempty"`
Creator PersonSafe `json:"creator,omitempty" url:"creator,omitempty"`
Community CommunitySafe `json:"community,omitempty" url:"community,omitempty"`
CreatorBannedFromCommunity bool `json:"creator_banned_from_community,omitempty" url:"creator_banned_from_community,omitempty"`
Counts PostAggregates `json:"counts,omitempty" url:"counts,omitempty"`
Subscribed bool `json:"subscribed,omitempty" url:"subscribed,omitempty"`
Saved bool `json:"saved,omitempty" url:"saved,omitempty"`
Read bool `json:"read,omitempty" url:"read,omitempty"`
CreatorBlocked bool `json:"creator_blocked,omitempty" url:"creator_blocked,omitempty"`
MyVote Optional[int] `json:"my_vote,omitempty" url:"my_vote,omitempty"`
UnreadComments int `json:"unread_comments,omitempty" url:"unread_comments,omitempty"`
}
type PostReportView struct {
PostReport PostReport `json:"post_report,omitempty" url:"post_report,omitempty"`
Post Post `json:"post,omitempty" url:"post,omitempty"`
Community CommunitySafe `json:"community,omitempty" url:"community,omitempty"`
Creator PersonSafe `json:"creator,omitempty" url:"creator,omitempty"`
PostCreator PersonSafe `json:"post_creator,omitempty" url:"post_creator,omitempty"`
CreatorBannedFromCommunity bool `json:"creator_banned_from_community,omitempty" url:"creator_banned_from_community,omitempty"`
MyVote Optional[int] `json:"my_vote,omitempty" url:"my_vote,omitempty"`
Counts PostAggregates `json:"counts,omitempty" url:"counts,omitempty"`
Resolver Optional[PersonSafe] `json:"resolver,omitempty" url:"resolver,omitempty"`
}
type CommentView struct {
Comment Comment `json:"comment,omitempty" url:"comment,omitempty"`
Creator PersonSafe `json:"creator,omitempty" url:"creator,omitempty"`
Post Post `json:"post,omitempty" url:"post,omitempty"`
Community CommunitySafe `json:"community,omitempty" url:"community,omitempty"`
Counts CommentAggregates `json:"counts,omitempty" url:"counts,omitempty"`
CreatorBannedFromCommunity bool `json:"creator_banned_from_community,omitempty" url:"creator_banned_from_community,omitempty"`
Subscribed SubscribedType `json:"subscribed,omitempty" url:"subscribed,omitempty"`
Saved bool `json:"saved,omitempty" url:"saved,omitempty"`
CreatorBlocked bool `json:"creator_blocked,omitempty" url:"creator_blocked,omitempty"`
MyVote Optional[int] `json:"my_vote,omitempty" url:"my_vote,omitempty"`
}
type CommentReportView struct {
CommentReport CommentReport `json:"comment_report,omitempty" url:"comment_report,omitempty"`
Comment Comment `json:"comment,omitempty" url:"comment,omitempty"`
Post Post `json:"post,omitempty" url:"post,omitempty"`
CommunitySafe CommunitySafe `json:"community_safe,omitempty" url:"community_safe,omitempty"`
Creator PersonSafe `json:"creator,omitempty" url:"creator,omitempty"`
CommentCreator PersonSafe `json:"comment_creator,omitempty" url:"comment_creator,omitempty"`
Counts CommentAggregates `json:"counts,omitempty" url:"counts,omitempty"`
CreatorBannedFromCommunity bool `json:"creator_banned_from_community,omitempty" url:"creator_banned_from_community,omitempty"`
MyVote Optional[int] `json:"my_vote,omitempty" url:"my_vote,omitempty"`
Resolver Optional[PersonSafe] `json:"resolver,omitempty" url:"resolver,omitempty"`
}
type ModAddCommunityView struct {
ModAddCommunity ModAddCommunity `json:"mod_add_community,omitempty" url:"mod_add_community,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator,omitempty" url:"moderator,omitempty"`
CommunitySafe CommunitySafe `json:"community_safe,omitempty" url:"community_safe,omitempty"`
ModdedPerson PersonSafe `json:"modded_person,omitempty" url:"modded_person,omitempty"`
}
type ModTransferCommunityView struct {
ModTransferCommunity ModTransferCommunity `json:"mod_transfer_community,omitempty" url:"mod_transfer_community,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator,omitempty" url:"moderator,omitempty"`
CommunitySafe CommunitySafe `json:"community_safe,omitempty" url:"community_safe,omitempty"`
ModdedPerson PersonSafe `json:"modded_person,omitempty" url:"modded_person,omitempty"`
}
type ModAddView struct {
ModAdd ModAdd `json:"mod_add,omitempty" url:"mod_add,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator,omitempty" url:"moderator,omitempty"`
ModdedPerson PersonSafe `json:"modded_person,omitempty" url:"modded_person,omitempty"`
}
type ModBanFromCommunityView struct {
ModBanFromCommunity ModBanFromCommunity `json:"mod_ban_from_community,omitempty" url:"mod_ban_from_community,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator,omitempty" url:"moderator,omitempty"`
CommunitySafe CommunitySafe `json:"community_safe,omitempty" url:"community_safe,omitempty"`
BannedPerson PersonSafe `json:"banned_person,omitempty" url:"banned_person,omitempty"`
}
type ModBanView struct {
ModBan ModBan `json:"mod_ban,omitempty" url:"mod_ban,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator,omitempty" url:"moderator,omitempty"`
BannedPerson PersonSafe `json:"banned_person,omitempty" url:"banned_person,omitempty"`
}
type ModLockPostView struct {
ModLockPost ModLockPost `json:"mod_lock_post,omitempty" url:"mod_lock_post,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator,omitempty" url:"moderator,omitempty"`
Post Post `json:"post,omitempty" url:"post,omitempty"`
CommunitySafe CommunitySafe `json:"community_safe,omitempty" url:"community_safe,omitempty"`
}
type ModRemoveCommentView struct {
ModRemoveComment ModRemoveComment `json:"mod_remove_comment,omitempty" url:"mod_remove_comment,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator,omitempty" url:"moderator,omitempty"`
Comment Comment `json:"comment,omitempty" url:"comment,omitempty"`
Commenter PersonSafe `json:"commenter,omitempty" url:"commenter,omitempty"`
Post Post `json:"post,omitempty" url:"post,omitempty"`
CommunitySafe CommunitySafe `json:"community_safe,omitempty" url:"community_safe,omitempty"`
}
type ModRemoveCommunityView struct {
ModRemoveCommunity ModRemoveCommunity `json:"mod_remove_community,omitempty" url:"mod_remove_community,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator,omitempty" url:"moderator,omitempty"`
CommunitySafe CommunitySafe `json:"community_safe,omitempty" url:"community_safe,omitempty"`
}
type ModRemovePostView struct {
ModRemovePost ModRemovePost `json:"mod_remove_post,omitempty" url:"mod_remove_post,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator,omitempty" url:"moderator,omitempty"`
Post Post `json:"post,omitempty" url:"post,omitempty"`
CommunitySafe CommunitySafe `json:"community_safe,omitempty" url:"community_safe,omitempty"`
}
type ModStickyPostView struct {
ModStickyPost ModStickyPost `json:"mod_sticky_post,omitempty" url:"mod_sticky_post,omitempty"`
Moderator Optional[PersonSafe] `json:"moderator,omitempty" url:"moderator,omitempty"`
Post Post `json:"post,omitempty" url:"post,omitempty"`
CommunitySafe CommunitySafe `json:"community_safe,omitempty" url:"community_safe,omitempty"`
}
type AdminPurgeCommunityView struct {
AdminPurgeCommunity AdminPurgeCommunity `json:"admin_purge_community,omitempty" url:"admin_purge_community,omitempty"`
Admin Optional[PersonSafe] `json:"admin,omitempty" url:"admin,omitempty"`
}
type AdminPurgePersonView struct {
AdminPurgePerson AdminPurgePerson `json:"admin_purge_person,omitempty" url:"admin_purge_person,omitempty"`
Admin Optional[PersonSafe] `json:"admin,omitempty" url:"admin,omitempty"`
}
type AdminPurgePostView struct {
AdminPurgePost AdminPurgePost `json:"admin_purge_post,omitempty" url:"admin_purge_post,omitempty"`
Admin Optional[PersonSafe] `json:"admin,omitempty" url:"admin,omitempty"`
CommunitySafe CommunitySafe `json:"community_safe,omitempty" url:"community_safe,omitempty"`
}
type AdminPurgeCommentView struct {
AdminPurgeComment AdminPurgeComment `json:"admin_purge_comment,omitempty" url:"admin_purge_comment,omitempty"`
Admin Optional[PersonSafe] `json:"admin,omitempty" url:"admin,omitempty"`
Post Post `json:"post,omitempty" url:"post,omitempty"`
}
type CommunityFollowerView struct {
CommunitySafe CommunitySafe `json:"community_safe,omitempty" url:"community_safe,omitempty"`
Follower PersonSafe `json:"follower,omitempty" url:"follower,omitempty"`
}
type CommunityBlockView struct {
PersonSafe PersonSafe `json:"person_safe,omitempty" url:"person_safe,omitempty"`
CommunitySafe CommunitySafe `json:"community_safe,omitempty" url:"community_safe,omitempty"`
}
type CommunityModeratorView struct {
CommunitySafe CommunitySafe `json:"community_safe,omitempty" url:"community_safe,omitempty"`
Moderator PersonSafe `json:"moderator,omitempty" url:"moderator,omitempty"`
}
type CommunityPersonBanView struct {
CommunitySafe CommunitySafe `json:"community_safe,omitempty" url:"community_safe,omitempty"`
Person PersonSafe `json:"person,omitempty" url:"person,omitempty"`
}
type PersonBlockView struct {
PersonSafe PersonSafe `json:"person_safe,omitempty" url:"person_safe,omitempty"`
Target PersonSafe `json:"target,omitempty" url:"target,omitempty"`
}
type CommunityView struct {
CommunitySafe CommunitySafe `json:"community_safe,omitempty" url:"community_safe,omitempty"`
Subscribed SubscribedType `json:"subscribed,omitempty" url:"subscribed,omitempty"`
Blocked bool `json:"blocked,omitempty" url:"blocked,omitempty"`
Counts CommunityAggregates `json:"counts,omitempty" url:"counts,omitempty"`
}
type RegistrationApplicationView struct {
RegistrationApplication RegistrationApplication `json:"registration_application,omitempty" url:"registration_application,omitempty"`
CreatorLocalUser LocalUserSettings `json:"creator_local_user,omitempty" url:"creator_local_user,omitempty"`
Creator PersonSafe `json:"creator,omitempty" url:"creator,omitempty"`
Admin Optional[PersonSafe] `json:"admin,omitempty" url:"admin,omitempty"`
}
type PrivateMessageReportView struct {
PrivateMessageReport PrivateMessageReport `json:"private_message_report,omitempty" url:"private_message_report,omitempty"`
PrivateMessage PrivateMessage `json:"private_message,omitempty" url:"private_message,omitempty"`
PrivateMessageCreator PersonSafe `json:"private_message_creator,omitempty" url:"private_message_creator,omitempty"`
Creator PersonSafe `json:"creator,omitempty" url:"creator,omitempty"`
Resolver Optional[PersonSafe] `json:"resolver,omitempty" url:"resolver,omitempty"`
}
type Tagline struct {
ID int `json:"id,omitempty" url:"id,omitempty"`
LocalSiteID int `json:"local_site_id,omitempty" url:"local_site_id,omitempty"`
Content string `json:"content,omitempty" url:"content,omitempty"`
Published string `json:"published,omitempty" url:"published,omitempty"`
Updated Optional[string] `json:"updated,omitempty" url:"updated,omitempty"`
}
type CommentReplyView struct {
CommentReply CommentReply `json:"comment_reply,omitempty" url:"comment_reply,omitempty"`
Comment Comment `json:"comment,omitempty" url:"comment,omitempty"`
Creator PersonSafe `json:"creator,omitempty" url:"creator,omitempty"`
Post Post `json:"post,omitempty" url:"post,omitempty"`
Community CommunitySafe `json:"community,omitempty" url:"community,omitempty"`
Recipient PersonSafe `json:"recipient,omitempty" url:"recipient,omitempty"`
Counts CommentAggregates `json:"counts,omitempty" url:"counts,omitempty"`
CreatorBannedFromCommunity bool `json:"creator_banned_from_community,omitempty" url:"creator_banned_from_community,omitempty"`
Subscribed SubscribedType `json:"subscribed,omitempty" url:"subscribed,omitempty"`
Saved bool `json:"saved,omitempty" url:"saved,omitempty"`
CreatorBlocked bool `json:"creator_blocked,omitempty" url:"creator_blocked,omitempty"`
MyVote Optional[int] `json:"my_vote,omitempty" url:"my_vote,omitempty"`
}

214
websocket.go Normal file
View File

@@ -0,0 +1,214 @@
package lemmy
import (
"context"
"encoding/json"
"fmt"
"net"
"net/http"
"net/url"
"reflect"
"time"
"github.com/cenkalti/backoff/v4"
"github.com/gorilla/websocket"
"go.arsenm.dev/go-lemmy/types"
)
type authData struct {
Auth string `json:"auth"`
}
// WSClient is a client for Lemmy's WebSocket API
type WSClient struct {
conn *websocket.Conn
baseURL *url.URL
respCh chan types.LemmyWebSocketMsg
errCh chan error
recHandler func(c *WSClient)
Token string
}
// NewWebSocket creates and returns a new WSClient, and
// starts a goroutine to read server responses and errors
func NewWebSocket(baseURL string) (*WSClient, error) {
u, err := url.Parse(baseURL)
if err != nil {
return nil, err
}
u = u.JoinPath("/api/v3")
conn, _, err := keepaliveDialer().Dial(u.JoinPath("ws").String(), nil)
if err != nil {
return nil, err
}
out := &WSClient{
conn: conn,
baseURL: u,
respCh: make(chan types.LemmyWebSocketMsg, 10),
errCh: make(chan error, 10),
}
go func() {
for {
var msg types.LemmyWebSocketMsg
err = conn.ReadJSON(&msg)
if err != nil {
out.errCh <- err
conn.Close()
err = backoff.RetryNotify(
func() error {
conn, _, err = keepaliveDialer().Dial(u.JoinPath("ws").String(), nil)
if err != nil {
out.errCh <- err
return err
}
out.conn = conn
out.recHandler(out)
return nil
},
backoff.NewExponentialBackOff(),
func(err error, d time.Duration) {
out.errCh <- fmt.Errorf("reconnect backoff (%s): %w", d, err)
},
)
if err != nil {
out.errCh <- err
}
continue
}
out.respCh <- msg
}
}()
return out, nil
}
// ClientLogin logs in to Lemmy by sending an HTTP request to the
// login endpoint. It stores the returned token in the client
// for future use.
func (c *WSClient) ClientLogin(ctx context.Context, l types.Login) error {
u := &url.URL{}
*u = *c.baseURL
if u.Scheme == "ws" {
u.Scheme = "http"
} else if u.Scheme == "wss" {
u.Scheme = "https"
}
hc := &Client{baseURL: u, client: http.DefaultClient}
err := hc.ClientLogin(ctx, l)
if err != nil {
return err
}
c.Token = hc.Token
return nil
}
// Request sends a request to the server. If data is nil,
// the authentication token will be sent instead. If data
// has an Auth field, it will be set to the authentication
// token automatically.
func (c *WSClient) Request(op types.Operation, data any) error {
if data == nil {
data = authData{}
}
data = c.setAuth(data)
d, err := json.Marshal(data)
if err != nil {
return err
}
return c.conn.WriteJSON(types.LemmyWebSocketMsg{
Op: op.Operation(),
Data: d,
})
}
// Responses returns a channel that receives messages from
// Lemmy.
func (c *WSClient) Responses() <-chan types.LemmyWebSocketMsg {
return c.respCh
}
// Errors returns a channel that receives errors
// received while attempting to read responses
func (c *WSClient) Errors() <-chan error {
return c.errCh
}
func (c *WSClient) OnReconnect(rh func(c *WSClient)) {
c.recHandler = rh
}
// setAuth uses reflection to automatically
// set struct fields called Auth of type
// string or types.Optional[string] to the
// authentication token, then returns the
// updated struct
func (c *WSClient) setAuth(data any) any {
val := reflect.New(reflect.TypeOf(data))
val.Elem().Set(reflect.ValueOf(data))
authField := val.Elem().FieldByName("Auth")
if !authField.IsValid() {
return data
}
switch authField.Type().String() {
case "string":
authField.SetString(c.Token)
case "types.Optional[string]":
setMtd := authField.MethodByName("Set")
out := setMtd.Call([]reflect.Value{reflect.ValueOf(c.Token)})
authField.Set(out[0])
default:
return data
}
return val.Elem().Interface()
}
func DecodeResponse(data json.RawMessage, out any) error {
return json.Unmarshal(data, out)
}
func keepaliveDialer() *websocket.Dialer {
d := &websocket.Dialer{
NetDial: func(network, addr string) (net.Conn, error) {
tcpAddr, err := net.ResolveTCPAddr(network, addr)
if err != nil {
return nil, err
}
conn, err := net.DialTCP(network, nil, tcpAddr)
if err != nil {
return nil, err
}
err = conn.SetKeepAlive(true)
if err != nil {
return nil, err
}
err = conn.SetKeepAlivePeriod(10 * time.Second)
if err != nil {
return nil, err
}
return conn, nil
},
}
d.NetDialContext = func(ctx context.Context, network, addr string) (net.Conn, error) {
return d.NetDial(network, addr)
}
return d
}