Compare commits
30 Commits
Author | SHA1 | Date | |
---|---|---|---|
7c464b1640 | |||
27fc1cd810 | |||
993d64b9d1 | |||
da7385572c | |||
966887f3ba | |||
5fd0a73741 | |||
db30aeabf5 | |||
8b669910e4 | |||
f01ac7b716 | |||
9edacef768 | |||
b22e50d439 | |||
46c74e6b9b | |||
4711b2b160 | |||
afa9507ee2 | |||
8a4f704788 | |||
7e2677c495 | |||
c40ad29ae1 | |||
2511d0dcc7 | |||
5a7463d006 | |||
0d50afac8e | |||
833745395f | |||
f8a84454d8 | |||
fb99765a2a | |||
7e4c13d031 | |||
4bc9ac9276 | |||
44dbe8c934 | |||
9f4bae88f2 | |||
11c92ef2b1 | |||
329bf27ffd | |||
058b3879ae |
1
.github/FUNDING.yml
vendored
Normal file
1
.github/FUNDING.yml
vendored
Normal file
@ -0,0 +1 @@
|
||||
liberapay: Elara6331
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
/test
|
||||
/gen
|
||||
/lemmy/
|
||||
|
31
README.md
31
README.md
@ -1,28 +1,33 @@
|
||||
# Go-Lemmy
|
||||
|
||||
[![Go Reference](https://pkg.go.dev/badge/go.arsenm.dev/go-lemmy.svg)](https://pkg.go.dev/go.arsenm.dev/go-lemmy)
|
||||
[![Go Reference](https://pkg.go.dev/badge/go.arsenm.dev/go-lemmy.svg)](https://pkg.go.dev/go.elara.ws/go-lemmy)
|
||||
|
||||
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).
|
||||
Go bindings to the [Lemmy](https://join-lemmy.org) API, automatically generated from Lemmy's source code using the generator in [cmd/gen](cmd/gen).
|
||||
|
||||
Examples:
|
||||
### Examples
|
||||
|
||||
- HTTP: [examples/http](examples/http)
|
||||
- WebSocket: [examples/websocket](examples/websocket)
|
||||
Examples can be found in the [examples](examples) directory.
|
||||
|
||||
### How to generate
|
||||
|
||||
First, build the generator:
|
||||
First, clone the [lemmy-js-client](https://github.com/LemmyNet/lemmy-js-client) repo at whatever version you need:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/LemmyNet/lemmy-js-client -b 0.18.3
|
||||
```
|
||||
|
||||
Inside it, build the JSON docs file:
|
||||
|
||||
```bash
|
||||
npm run docs -- --json docs.json
|
||||
```
|
||||
|
||||
Next, build the generator:
|
||||
|
||||
```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
|
||||
@ -32,7 +37,7 @@ rm **/*.gen.go
|
||||
Execute the generator:
|
||||
|
||||
```bash
|
||||
./gen -out-dir .
|
||||
./gen -json-file <path_to_docs.json> -out-dir .
|
||||
```
|
||||
|
||||
And that's it! Your generated code should be ready for use.
|
233
cmd/gen/extractor/extractor.go
Normal file
233
cmd/gen/extractor/extractor.go
Normal file
@ -0,0 +1,233 @@
|
||||
package extractor
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/tidwall/gjson"
|
||||
)
|
||||
|
||||
type Route struct {
|
||||
Name string
|
||||
Summary string
|
||||
Method string
|
||||
Path string
|
||||
ParamsName string
|
||||
ReturnName string
|
||||
}
|
||||
|
||||
type Struct struct {
|
||||
Name string
|
||||
Fields []Field
|
||||
UnionNames []string
|
||||
}
|
||||
|
||||
type Field struct {
|
||||
Name string
|
||||
IsArray bool
|
||||
IsOptional bool
|
||||
Type string
|
||||
}
|
||||
|
||||
type Extractor struct {
|
||||
root gjson.Result
|
||||
}
|
||||
|
||||
// New parses the file at path and returns an extractor with its contents.
|
||||
func New(path string) (*Extractor, error) {
|
||||
data, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &Extractor{gjson.ParseBytes(data)}, nil
|
||||
}
|
||||
|
||||
// Extract reads the JSON document and extracts all the routes and structs from it.
|
||||
func (e *Extractor) Extract() ([]Route, []Struct) {
|
||||
structs := map[int64]Struct{}
|
||||
var out []Route
|
||||
|
||||
// Get all the routes in the JSON document
|
||||
routes := e.root.Get("children.#.children.#(kind==2048)#|@flatten")
|
||||
|
||||
for _, route := range routes.Array() {
|
||||
name := route.Get("name").String()
|
||||
signature := route.Get(`signatures.0`)
|
||||
|
||||
// Get the code part of the route's summary.
|
||||
// This will contain the HTTP method and path.
|
||||
httpInfo := signature.Get(`comment.summary.#(kind=="code").text`).String()
|
||||
if !strings.HasPrefix(httpInfo, "`HTTP") {
|
||||
continue
|
||||
}
|
||||
method, path := parseHTTPInfo(httpInfo)
|
||||
|
||||
summary := strings.TrimSpace(signature.Get(`comment.summary.#(kind=="text").text`).String())
|
||||
if summary == "" {
|
||||
continue
|
||||
}
|
||||
|
||||
// Get the ID and name of the type this function accepts
|
||||
paramsID := signature.Get("parameters.0.type.target").Int()
|
||||
paramsName := signature.Get("parameters.0.type.name").String()
|
||||
|
||||
// Get the ID and name of the type this function returns
|
||||
returnID := signature.Get("type.typeArguments.0.target").Int()
|
||||
returnName := signature.Get("type.typeArguments.0.name").String()
|
||||
|
||||
anyType := false
|
||||
if returnName == "any" {
|
||||
anyType = true
|
||||
}
|
||||
|
||||
// Get the referenced structs from the JSON document
|
||||
e.getStructs([]int64{paramsID, returnID}, structs)
|
||||
|
||||
// If the parameters struct contains no fields or union names
|
||||
if len(structs[paramsID].Fields) == 0 && len(structs[paramsID].UnionNames) == 0 {
|
||||
// Delete the params struct from the structs map
|
||||
// to make sure it doesn't get generated
|
||||
delete(structs, paramsID)
|
||||
|
||||
// Set paramsName to an empty string to signify that this route
|
||||
// has no input parameters.
|
||||
paramsName = ""
|
||||
}
|
||||
|
||||
// If the return struct contains no fields or union names
|
||||
if len(structs[returnID].Fields) == 0 && len(structs[returnID].UnionNames) == 0 {
|
||||
// Delete the return struct from the structs map
|
||||
// to make sure it doesn't get generated
|
||||
delete(structs, returnID)
|
||||
|
||||
// Set paramsName to an empty string to signify that this route
|
||||
// has no return value.
|
||||
returnName = ""
|
||||
}
|
||||
|
||||
if anyType {
|
||||
returnName = "map[string]any"
|
||||
}
|
||||
|
||||
out = append(out, Route{
|
||||
Name: name,
|
||||
Summary: summary,
|
||||
Method: method,
|
||||
Path: path,
|
||||
ParamsName: paramsName,
|
||||
ReturnName: returnName,
|
||||
})
|
||||
}
|
||||
return out, getStructSlice(structs)
|
||||
}
|
||||
|
||||
func (e *Extractor) getStructs(ids []int64, structs map[int64]Struct) {
|
||||
for _, id := range ids {
|
||||
if _, ok := structs[id]; ok {
|
||||
continue
|
||||
}
|
||||
|
||||
// Get the struct with the given ID from the JSON document
|
||||
jstruct := e.root.Get(fmt.Sprintf("children.#(id==%d)", id))
|
||||
if !jstruct.Exists() {
|
||||
continue
|
||||
}
|
||||
|
||||
name := jstruct.Get("name").String()
|
||||
|
||||
if jstruct.Get("type.type").String() == "union" {
|
||||
structs[id] = Struct{
|
||||
Name: name,
|
||||
UnionNames: e.unionNames(jstruct),
|
||||
}
|
||||
} else {
|
||||
fields, newIDs := e.fields(jstruct)
|
||||
|
||||
structs[id] = Struct{
|
||||
Name: name,
|
||||
Fields: fields,
|
||||
}
|
||||
|
||||
// Recursively get any structs referenced by this one
|
||||
e.getStructs(newIDs, structs)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// unionNames gets all the names of union type members
|
||||
func (e *Extractor) unionNames(jstruct gjson.Result) []string {
|
||||
jnames := jstruct.Get("type.types").Array()
|
||||
out := make([]string, len(jnames))
|
||||
for i, name := range jnames {
|
||||
out[i] = name.Get("value").String()
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
// fields gets all the fields in a given struct from the JSON document.
|
||||
// It returns the fields and the IDs of any types they referenced.
|
||||
func (e *Extractor) fields(jstruct gjson.Result) ([]Field, []int64) {
|
||||
var fields []Field
|
||||
var ids []int64
|
||||
jfields := jstruct.Get("children").Array()
|
||||
for _, jfield := range jfields {
|
||||
var field Field
|
||||
|
||||
field.Name = jfield.Get("name").String()
|
||||
field.IsOptional = jfield.Get("flags.isOptional").Bool()
|
||||
|
||||
if jfield.Get("type.type").String() == "array" {
|
||||
field.IsArray = true
|
||||
field.Type = jfield.Get("type.elementType.name").String()
|
||||
|
||||
switch jfield.Get("type.elementType.type").String() {
|
||||
case "reference":
|
||||
// If this field is referencing another type, add that type's id
|
||||
// to the ids slice.
|
||||
ids = append(ids, jfield.Get("type.elementType.target").Int())
|
||||
case "union":
|
||||
// Convert unions to strings
|
||||
field.Type = "string"
|
||||
}
|
||||
} else {
|
||||
field.Type = jfield.Get("type.name").String()
|
||||
|
||||
switch jfield.Get("type.type").String() {
|
||||
case "reference":
|
||||
// If this field is referencing another type, add that type's id
|
||||
// to the ids slice.
|
||||
ids = append(ids, jfield.Get("type.target").Int())
|
||||
case "union":
|
||||
// Convert unions to strings
|
||||
field.Type = "string"
|
||||
}
|
||||
}
|
||||
|
||||
fields = append(fields, field)
|
||||
}
|
||||
return fields, ids
|
||||
}
|
||||
|
||||
// parseHTTPInfo parses the string from a route's summary,
|
||||
// and returns the method and path it uses
|
||||
func parseHTTPInfo(httpInfo string) (method, path string) {
|
||||
httpInfo = strings.Trim(httpInfo, "`")
|
||||
method, path, _ = strings.Cut(httpInfo, " ")
|
||||
method = strings.TrimPrefix(method, "HTTP.")
|
||||
method = strings.ToUpper(method)
|
||||
return method, path
|
||||
}
|
||||
|
||||
// getStructSlice returns all the structs in a map
|
||||
func getStructSlice(m map[int64]Struct) []Struct {
|
||||
out := make([]Struct, len(m))
|
||||
i := 0
|
||||
for _, s := range m {
|
||||
out[i] = s
|
||||
i++
|
||||
}
|
||||
return out
|
||||
}
|
@ -5,7 +5,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/dave/jennifer/jen"
|
||||
"go.elara.ws/go-lemmy/cmd/gen/parser"
|
||||
"go.elara.ws/go-lemmy/cmd/gen/extractor"
|
||||
)
|
||||
|
||||
type RoutesGenerator struct {
|
||||
@ -17,45 +17,89 @@ func NewRoutes(w io.Writer, pkgName string) *RoutesGenerator {
|
||||
return &RoutesGenerator{w, pkgName}
|
||||
}
|
||||
|
||||
func (r *RoutesGenerator) Generate(routes []parser.Route, impls map[string]string) error {
|
||||
func (r *RoutesGenerator) Generate(routes []extractor.Route) error {
|
||||
f := jen.NewFile(r.PkgName)
|
||||
f.HeaderComment("Code generated by go.elara.ws/go-lemmy/cmd/gen (routes generator). DO NOT EDIT.")
|
||||
|
||||
for _, r := range routes {
|
||||
resStruct := impls[r.Struct]
|
||||
|
||||
f.Comment(r.Summary)
|
||||
f.Func().Params(
|
||||
jen.Id("c").Id("*Client"),
|
||||
).Id(transformName(r.Struct)).Params(
|
||||
jen.Id("ctx").Qual("context", "Context"),
|
||||
jen.Id("data").Qual("go.elara.ws/go-lemmy/types", r.Struct),
|
||||
).Params(
|
||||
jen.Op("*").Qual("go.elara.ws/go-lemmy/types", resStruct),
|
||||
jen.Error(),
|
||||
).BlockFunc(func(g *jen.Group) {
|
||||
g.Id("resData").Op(":=").Op("&").Qual("go.elara.ws/go-lemmy/types", resStruct).Block()
|
||||
|
||||
var funcName string
|
||||
switch r.Method {
|
||||
case "GET":
|
||||
funcName = "getReq"
|
||||
default:
|
||||
funcName = "req"
|
||||
).Id(transformName(r.Name)).ParamsFunc(func(g *jen.Group) {
|
||||
g.Id("ctx").Qual("context", "Context")
|
||||
if r.ParamsName != "" {
|
||||
g.Id("data").Id(r.ParamsName)
|
||||
}
|
||||
}).ParamsFunc(func(g *jen.Group) {
|
||||
if r.ReturnName == "map[string]any" {
|
||||
g.Map(jen.String()).Any()
|
||||
} else if r.ReturnName != "" {
|
||||
g.Op("*").Id(r.ReturnName)
|
||||
}
|
||||
|
||||
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.Error()
|
||||
}).BlockFunc(func(g *jen.Group) {
|
||||
data := jen.Id("data")
|
||||
// If there are no parameters, set the data to nil
|
||||
if r.ParamsName == "" {
|
||||
data = jen.Nil()
|
||||
}
|
||||
|
||||
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()),
|
||||
)
|
||||
returnName := r.ReturnName
|
||||
if returnName == "" {
|
||||
returnName = "emptyResponse"
|
||||
}
|
||||
|
||||
g.Return(jen.Id("resData"), jen.Nil())
|
||||
if returnName == "map[string]any" {
|
||||
g.Id("resData").Op(":=").Map(jen.String()).Any().Block()
|
||||
} else {
|
||||
g.Id("resData").Op(":=").Op("&").Id(returnName).Block()
|
||||
}
|
||||
|
||||
funcName := "req"
|
||||
if r.Method == "GET" {
|
||||
funcName = "getReq"
|
||||
}
|
||||
|
||||
g.List(jen.Id("res"), jen.Err()).Op(":=").Id("c").Dot(funcName).ParamsFunc(func(g *jen.Group) {
|
||||
g.Id("ctx")
|
||||
g.Lit(r.Method)
|
||||
g.Lit(r.Path)
|
||||
g.Add(data)
|
||||
|
||||
if returnName == "map[string]any" {
|
||||
g.Op("&").Id("resData")
|
||||
} else {
|
||||
g.Id("resData")
|
||||
}
|
||||
})
|
||||
g.If(jen.Err().Op("!=").Nil()).BlockFunc(func(g *jen.Group) {
|
||||
if returnName == "emptyResponse" {
|
||||
g.Return(jen.Err())
|
||||
} else {
|
||||
g.Return(jen.Nil(), jen.Err())
|
||||
}
|
||||
})
|
||||
|
||||
if r.ReturnName == "map[string]any" {
|
||||
g.Err().Op("=").Id("resError").Params(jen.Id("res"), jen.Id("NewOptionalNil[string]").Params())
|
||||
} else {
|
||||
g.Err().Op("=").Id("resError").Params(jen.Id("res"), jen.Id("resData").Dot("Error"))
|
||||
}
|
||||
|
||||
g.If(jen.Err().Op("!=").Nil()).BlockFunc(func(g *jen.Group) {
|
||||
if returnName == "emptyResponse" {
|
||||
g.Return(jen.Err())
|
||||
} else {
|
||||
g.Return(jen.Nil(), jen.Err())
|
||||
}
|
||||
})
|
||||
|
||||
if returnName == "emptyResponse" {
|
||||
g.Return(jen.Nil())
|
||||
} else {
|
||||
g.Return(jen.Id("resData"), jen.Nil())
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@ -63,6 +107,7 @@ func (r *RoutesGenerator) Generate(routes []parser.Route, impls map[string]strin
|
||||
}
|
||||
|
||||
func transformName(s string) string {
|
||||
s = strings.ToUpper(s[:1]) + s[1:]
|
||||
s = strings.TrimPrefix(s, "Get")
|
||||
s = strings.TrimPrefix(s, "List")
|
||||
return s
|
||||
|
@ -3,9 +3,10 @@ package generator
|
||||
import (
|
||||
"io"
|
||||
"strings"
|
||||
"unicode"
|
||||
|
||||
"github.com/dave/jennifer/jen"
|
||||
"go.elara.ws/go-lemmy/cmd/gen/parser"
|
||||
"go.elara.ws/go-lemmy/cmd/gen/extractor"
|
||||
)
|
||||
|
||||
type StructGenerator struct {
|
||||
@ -17,32 +18,31 @@ func NewStruct(w io.Writer, pkgName string) *StructGenerator {
|
||||
return &StructGenerator{w, pkgName}
|
||||
}
|
||||
|
||||
func (s *StructGenerator) Generate(items []parser.Item) error {
|
||||
func (s *StructGenerator) Generate(items []extractor.Struct) error {
|
||||
f := jen.NewFile(s.PkgName)
|
||||
f.HeaderComment("Code generated by go.elara.ws/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 len(item.UnionNames) > 0 {
|
||||
f.Type().Id(item.Name).String()
|
||||
|
||||
f.Const().DefsFunc(func(g *jen.Group) {
|
||||
for _, member := range item.UnionNames {
|
||||
constName := strings.Replace(item.Name+string(member), " ", "", -1)
|
||||
g.Id(constName).Id(item.Name).Op("=").Lit(string(member))
|
||||
}
|
||||
})
|
||||
} else {
|
||||
f.Type().Id(item.Name).StructFunc(func(g *jen.Group) {
|
||||
for _, field := range item.Fields {
|
||||
g.Id(transformFieldName(field.Name)).Add(getType(field)).Tag(map[string]string{
|
||||
"json": field.Name,
|
||||
"url": field.Name + ",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))
|
||||
if strings.HasSuffix(item.Name, "Response") {
|
||||
g.Id("Error").Id("Optional").Types(jen.String()).Tag(map[string]string{"json": "error"})
|
||||
}
|
||||
})
|
||||
}
|
||||
@ -50,3 +50,74 @@ func (s *StructGenerator) Generate(items []parser.Item) error {
|
||||
|
||||
return f.Render(s.w)
|
||||
}
|
||||
|
||||
func getType(f extractor.Field) jen.Code {
|
||||
// Some time fields are strings in the JS client,
|
||||
// use time.Time for those
|
||||
switch f.Name {
|
||||
case "published", "updated", "when_":
|
||||
return jen.Qual("time", "Time")
|
||||
}
|
||||
|
||||
// Rank types such as hot_rank and hot_rank_active may be floats.
|
||||
if strings.Contains(f.Name, "rank") {
|
||||
return jen.Float64()
|
||||
}
|
||||
|
||||
t := transformType(f.Name, f.Type)
|
||||
if f.IsArray {
|
||||
t = "[]" + t
|
||||
}
|
||||
if f.IsOptional {
|
||||
t = "Optional[" + t + "]"
|
||||
}
|
||||
return jen.Id(t)
|
||||
}
|
||||
|
||||
func transformType(name, t string) string {
|
||||
switch t {
|
||||
case "number":
|
||||
return "int64"
|
||||
case "boolean":
|
||||
return "bool"
|
||||
default:
|
||||
return t
|
||||
}
|
||||
}
|
||||
|
||||
func transformFieldName(s string) string {
|
||||
s = snakeToCamel(s)
|
||||
s = strings.NewReplacer(
|
||||
"Id", "ID",
|
||||
"Url", "URL",
|
||||
"Nsfw", "NSFW",
|
||||
"Jwt", "JWT",
|
||||
"Crud", "CRUD",
|
||||
"Pm", "PM",
|
||||
"Totp", "TOTP",
|
||||
"2fa", "2FA",
|
||||
"Png", "PNG",
|
||||
"Uuid", "UUID",
|
||||
"Wav", "WAV",
|
||||
).Replace(s)
|
||||
return s
|
||||
}
|
||||
|
||||
func snakeToCamel(s string) string {
|
||||
sb := &strings.Builder{}
|
||||
capitalizeNext := true
|
||||
for _, char := range s {
|
||||
if char == '_' {
|
||||
capitalizeNext = true
|
||||
continue
|
||||
}
|
||||
|
||||
if capitalizeNext {
|
||||
sb.WriteRune(unicode.ToUpper(char))
|
||||
capitalizeNext = false
|
||||
} else {
|
||||
sb.WriteRune(char)
|
||||
}
|
||||
}
|
||||
return sb.String()
|
||||
}
|
||||
|
156
cmd/gen/main.go
156
cmd/gen/main.go
@ -2,14 +2,11 @@ package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"io/fs"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"go.elara.ws/go-lemmy/cmd/gen/extractor"
|
||||
"go.elara.ws/go-lemmy/cmd/gen/generator"
|
||||
"go.elara.ws/go-lemmy/cmd/gen/parser"
|
||||
"go.elara.ws/logger"
|
||||
"go.elara.ws/logger/log"
|
||||
)
|
||||
@ -18,145 +15,27 @@ 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")
|
||||
jsonFile := flag.String("json-file", "lemmy.json", "Path to the JSON file generated from lemmy's docs")
|
||||
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", "Recipient", "WsMessage", "Connect", "SessionInfo"}
|
||||
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)
|
||||
e, err := extractor.New(*jsonFile)
|
||||
if err != nil {
|
||||
log.Fatal("Error opening routes file").Err(err).Send()
|
||||
log.Fatal("Error creating extractor").Err(err).Send()
|
||||
}
|
||||
defer rf.Close()
|
||||
|
||||
rp := parser.NewRoutes(rf)
|
||||
routes, err := rp.Parse()
|
||||
routes, structs := e.Extract()
|
||||
|
||||
otf, err := os.Create(filepath.Join(*outDir, "types.gen.go"))
|
||||
if err != nil {
|
||||
log.Fatal("Error parsing routes file").Err(err).Send()
|
||||
log.Fatal("Error creating types output file").Err(err).Send()
|
||||
}
|
||||
defer otf.Close()
|
||||
|
||||
err = generator.NewStruct(otf, "lemmy").Generate(structs)
|
||||
if err != nil {
|
||||
log.Fatal("Error generating output routes file").Err(err).Send()
|
||||
}
|
||||
|
||||
orf, err := os.Create(filepath.Join(*outDir, "routes.gen.go"))
|
||||
@ -165,12 +44,7 @@ func main() {
|
||||
}
|
||||
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)
|
||||
err = generator.NewRoutes(orf, "lemmy").Generate(routes)
|
||||
if err != nil {
|
||||
log.Fatal("Error generating output routes file").Err(err).Send()
|
||||
}
|
||||
|
@ -1,62 +0,0 @@
|
||||
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)
|
||||
}
|
@ -1,121 +0,0 @@
|
||||
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)
|
||||
}
|
@ -1,267 +0,0 @@
|
||||
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)
|
||||
}
|
@ -1,49 +0,0 @@
|
||||
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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
@ -4,18 +4,17 @@ import (
|
||||
"context"
|
||||
|
||||
"go.elara.ws/go-lemmy"
|
||||
"go.elara.ws/go-lemmy/types"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
c, err := lemmy.New("https://lemmygrad.ml")
|
||||
c, err := lemmy.New("https://lemmy.ml")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
err = c.ClientLogin(ctx, types.Login{
|
||||
err = c.ClientLogin(ctx, lemmy.Login{
|
||||
UsernameOrEmail: "user@example.com",
|
||||
Password: `TestPwd`,
|
||||
})
|
||||
@ -23,8 +22,8 @@ func main() {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
_, err = c.SaveUserSettings(ctx, types.SaveUserSettings{
|
||||
BotAccount: types.NewOptional(true),
|
||||
_, err = c.SaveUserSettings(ctx, lemmy.SaveUserSettings{
|
||||
BotAccount: lemmy.NewOptional(true),
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
48
examples/comments/main.go
Normal file
48
examples/comments/main.go
Normal file
@ -0,0 +1,48 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
|
||||
"go.elara.ws/go-lemmy"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
c, err := lemmy.New("https://lemmy.ml")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
err = c.ClientLogin(ctx, lemmy.Login{
|
||||
UsernameOrEmail: "user@example.com",
|
||||
Password: `TestPwd`,
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
cr, err := c.CreateComment(ctx, lemmy.CreateComment{
|
||||
PostID: 2,
|
||||
Content: "Hello from go-lemmy!",
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
cr2, err := c.CreateComment(ctx, lemmy.CreateComment{
|
||||
PostID: 2,
|
||||
ParentID: lemmy.NewOptional(cr.CommentView.Comment.ID),
|
||||
Content: "Reply from go-lemmy",
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
log.Printf(
|
||||
"Created comment %d and replied to it with comment %d!\n",
|
||||
cr.CommentView.Comment.ID,
|
||||
cr2.CommentView.Comment.ID,
|
||||
)
|
||||
}
|
43
examples/posts/main.go
Normal file
43
examples/posts/main.go
Normal file
@ -0,0 +1,43 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
|
||||
"go.elara.ws/go-lemmy"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
c, err := lemmy.New("https://lemmy.ml")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// Log in to lemmy.ml
|
||||
err = c.ClientLogin(ctx, lemmy.Login{
|
||||
UsernameOrEmail: "user@example.com",
|
||||
Password: `TestPwd`,
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// Get the linux community to get its ID.
|
||||
gcr, err := c.Community(ctx, lemmy.GetCommunity{
|
||||
Name: lemmy.NewOptional("linux"),
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// Create a Hello World post in the linux community.
|
||||
pr, err := c.CreatePost(ctx, lemmy.CreatePost{
|
||||
CommunityID: gcr.CommunityView.Community.ID,
|
||||
Name: "Hello, World!",
|
||||
Body: lemmy.NewOptional("This is an example post"),
|
||||
})
|
||||
|
||||
log.Println("Created post:", pr.PostView.Post.ID)
|
||||
}
|
@ -1,66 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
|
||||
"go.elara.ws/go-lemmy"
|
||||
"go.elara.ws/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)
|
||||
}
|
||||
}
|
5
go.mod
5
go.mod
@ -3,10 +3,9 @@ module go.elara.ws/go-lemmy
|
||||
go 1.19
|
||||
|
||||
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/gorilla/websocket v1.4.2
|
||||
github.com/tidwall/gjson v1.17.0
|
||||
go.elara.ws/logger v0.0.0-20230421022458-e80700db2090
|
||||
golang.org/x/exp v0.0.0-20230105000112-eab7a2c85304
|
||||
)
|
||||
@ -14,6 +13,8 @@ require (
|
||||
require (
|
||||
github.com/gookit/color v1.5.1 // indirect
|
||||
github.com/mattn/go-isatty v0.0.14 // indirect
|
||||
github.com/tidwall/match v1.1.1 // indirect
|
||||
github.com/tidwall/pretty v1.2.0 // indirect
|
||||
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect
|
||||
golang.org/x/sys v0.1.0 // indirect
|
||||
)
|
||||
|
10
go.sum
10
go.sum
@ -1,5 +1,3 @@
|
||||
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=
|
||||
@ -10,8 +8,6 @@ github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD
|
||||
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
|
||||
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=
|
||||
@ -19,6 +15,12 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
|
||||
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
|
||||
github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM=
|
||||
github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
|
||||
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
|
||||
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
|
||||
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
|
||||
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.elara.ws/logger v0.0.0-20230421022458-e80700db2090 h1:RVC8XvWo6Yw4HUshqx4TSzuBDScDghafU6QFRJ4xPZg=
|
||||
|
115
lemmy.go
115
lemmy.go
@ -4,15 +4,18 @@ import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"reflect"
|
||||
|
||||
"github.com/google/go-querystring/query"
|
||||
"go.elara.ws/go-lemmy/types"
|
||||
)
|
||||
|
||||
// ErrNoToken is an error returned by ClientLogin if the server sends a null or empty token
|
||||
var ErrNoToken = errors.New("the server didn't provide a token value in its response")
|
||||
|
||||
// Client is a client for Lemmy's HTTP API
|
||||
type Client struct {
|
||||
client *http.Client
|
||||
@ -32,27 +35,30 @@ func NewWithClient(baseURL string, client *http.Client) (*Client, error) {
|
||||
return nil, err
|
||||
}
|
||||
u = u.JoinPath("/api/v3")
|
||||
|
||||
return &Client{baseURL: u, client: client}, 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 *Client) ClientLogin(ctx context.Context, l types.Login) error {
|
||||
lr, err := c.Login(ctx, l)
|
||||
// ClientLogin logs in to Lemmy by calling the login endpoint, and
|
||||
// stores the returned token in the Token field for use in future requests.
|
||||
//
|
||||
// The Token field can be set manually if you'd like to persist the
|
||||
// token somewhere.
|
||||
func (c *Client) ClientLogin(ctx context.Context, data Login) error {
|
||||
lr, err := c.Login(ctx, data)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
c.Token = lr.JWT.MustValue()
|
||||
token, ok := lr.JWT.Value()
|
||||
if !ok || token == "" {
|
||||
return ErrNoToken
|
||||
}
|
||||
c.Token = token
|
||||
return nil
|
||||
}
|
||||
|
||||
// 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)
|
||||
|
||||
var r io.Reader
|
||||
if data != nil {
|
||||
jsonData, err := json.Marshal(data)
|
||||
@ -74,6 +80,10 @@ func (c *Client) req(ctx context.Context, method string, path string, data, resp
|
||||
|
||||
req.Header.Add("Content-Type", "application/json")
|
||||
|
||||
if c.Token != "" {
|
||||
req.Header.Add("Authorization", "Bearer "+c.Token)
|
||||
}
|
||||
|
||||
res, err := c.client.Do(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -91,17 +101,17 @@ func (c *Client) req(ctx context.Context, method string, path string, data, resp
|
||||
}
|
||||
|
||||
// getReq makes a get request to the Lemmy server.
|
||||
// It is separate from req() because it uses query
|
||||
// It's 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)
|
||||
|
||||
getURL := c.baseURL.JoinPath(path)
|
||||
vals, err := query.Values(data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
if data != nil {
|
||||
vals, err := query.Values(data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
getURL.RawQuery = vals.Encode()
|
||||
}
|
||||
getURL.RawQuery = vals.Encode()
|
||||
|
||||
req, err := http.NewRequestWithContext(
|
||||
ctx,
|
||||
@ -113,6 +123,10 @@ func (c *Client) getReq(ctx context.Context, method string, path string, data, r
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if c.Token != "" {
|
||||
req.Header.Add("Authorization", "Bearer "+c.Token)
|
||||
}
|
||||
|
||||
res, err := c.client.Do(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -129,50 +143,39 @@ 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{
|
||||
// Error represents an error returned by the Lemmy API
|
||||
type Error struct {
|
||||
ErrStr string
|
||||
Code int
|
||||
}
|
||||
|
||||
func (le Error) Error() string {
|
||||
if le.ErrStr != "" {
|
||||
return fmt.Sprintf("%d %s: %s", le.Code, http.StatusText(le.Code), le.ErrStr)
|
||||
} else {
|
||||
return fmt.Sprintf("%d %s", le.Code, http.StatusText(le.Code))
|
||||
}
|
||||
}
|
||||
|
||||
// emptyResponse is a response without any fields.
|
||||
// It has an Error field to capture any errors.
|
||||
type emptyResponse struct {
|
||||
Error Optional[string] `json:"error"`
|
||||
}
|
||||
|
||||
// resError checks if the response contains an error, and if so, returns
|
||||
// a Go error representing it.
|
||||
func resError(res *http.Response, err Optional[string]) error {
|
||||
if errstr, ok := err.Value(); ok {
|
||||
return Error{
|
||||
Code: res.StatusCode,
|
||||
ErrStr: lr.Error.MustValue(),
|
||||
ErrStr: errstr,
|
||||
}
|
||||
} else if res.StatusCode != http.StatusOK {
|
||||
return types.HTTPError{
|
||||
return Error{
|
||||
Code: res.StatusCode,
|
||||
}
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// 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))
|
||||
|
||||
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()
|
||||
}
|
||||
|
@ -1,64 +1,53 @@
|
||||
package types
|
||||
package lemmy
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
var ErrOptionalEmpty = errors.New("optional value is empty")
|
||||
|
||||
// Optional represents an optional value
|
||||
type Optional[T any] struct {
|
||||
value *T
|
||||
}
|
||||
|
||||
// NewOptional creates an optional with value v
|
||||
func NewOptional[T any](v T) Optional[T] {
|
||||
return Optional[T]{value: &v}
|
||||
}
|
||||
|
||||
func NewOptionalPtr[T any](v *T) Optional[T] {
|
||||
return Optional[T]{value: v}
|
||||
}
|
||||
|
||||
// NewOptionalNil creates a new nil optional value
|
||||
func NewOptionalNil[T any]() Optional[T] {
|
||||
return Optional[T]{}
|
||||
}
|
||||
|
||||
// Set sets the value of the optional
|
||||
func (o Optional[T]) Set(v T) Optional[T] {
|
||||
o.value = &v
|
||||
return o
|
||||
}
|
||||
|
||||
func (o Optional[T]) SetPtr(v *T) Optional[T] {
|
||||
o.value = v
|
||||
return o
|
||||
}
|
||||
|
||||
// SetNil sets the optional value to nil
|
||||
func (o Optional[T]) SetNil() Optional[T] {
|
||||
o.value = nil
|
||||
return o
|
||||
}
|
||||
|
||||
// IsValid returns true if the value of the optional is not nil
|
||||
func (o Optional[T]) IsValid() bool {
|
||||
return o.value != nil
|
||||
}
|
||||
|
||||
func (o Optional[T]) MustValue() T {
|
||||
if o.value == nil {
|
||||
panic("optional value is nil")
|
||||
}
|
||||
return *o.value
|
||||
}
|
||||
|
||||
func (o Optional[T]) Value() (T, error) {
|
||||
// Value returns the value in the optional.
|
||||
func (o Optional[T]) Value() (T, bool) {
|
||||
if o.value != nil {
|
||||
return *o.value, ErrOptionalEmpty
|
||||
return *o.value, true
|
||||
}
|
||||
return *new(T), nil
|
||||
return *new(T), false
|
||||
}
|
||||
|
||||
// ValueOr returns the value inside the optional if it exists, or else it returns fallback
|
||||
func (o Optional[T]) ValueOr(fallback T) T {
|
||||
if o.value != nil {
|
||||
return *o.value
|
||||
@ -66,10 +55,21 @@ func (o Optional[T]) ValueOr(fallback T) T {
|
||||
return fallback
|
||||
}
|
||||
|
||||
// ValueOrZero returns the value inside the optional if it exists, or else it returns the zero value of T
|
||||
func (o Optional[T]) ValueOrZero() T {
|
||||
if o.value != nil {
|
||||
return *o.value
|
||||
}
|
||||
var value T
|
||||
return value
|
||||
}
|
||||
|
||||
// MarshalJSON encodes the optional value as JSON
|
||||
func (o Optional[T]) MarshalJSON() ([]byte, error) {
|
||||
return json.Marshal(o.value)
|
||||
}
|
||||
|
||||
// UnmarshalJSON decodes JSON into the optional value
|
||||
func (o *Optional[T]) UnmarshalJSON(b []byte) error {
|
||||
if bytes.Equal(b, []byte("null")) {
|
||||
o.value = nil
|
||||
@ -80,6 +80,7 @@ func (o *Optional[T]) UnmarshalJSON(b []byte) error {
|
||||
return json.Unmarshal(b, o.value)
|
||||
}
|
||||
|
||||
// EncodeValues encodes the optional as a URL query parameter
|
||||
func (o Optional[T]) EncodeValues(key string, v *url.Values) error {
|
||||
s := o.String()
|
||||
if s != "<nil>" {
|
||||
@ -88,6 +89,7 @@ func (o Optional[T]) EncodeValues(key string, v *url.Values) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// String returns the string representation of the optional value
|
||||
func (o Optional[T]) String() string {
|
||||
if o.value == nil {
|
||||
return "<nil>"
|
||||
@ -95,6 +97,7 @@ func (o Optional[T]) String() string {
|
||||
return fmt.Sprint(*o.value)
|
||||
}
|
||||
|
||||
// GoString returns the Go representation of the optional value
|
||||
func (o Optional[T]) GoString() string {
|
||||
if o.value == nil {
|
||||
return "nil"
|
942
routes.gen.go
942
routes.gen.go
File diff suppressed because it is too large
Load Diff
1552
types.gen.go
Normal file
1552
types.gen.go
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,27 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/activity.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/actor_language.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/websocket/handlers/captcha.rs
|
||||
// Code generated by go.elara.ws/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
|
||||
|
||||
package types
|
||||
|
||||
type AddCaptcha struct {
|
||||
Captcha CaptchaItem `json:"captcha" url:"captcha,omitempty"`
|
||||
}
|
||||
type CheckCaptcha struct {
|
||||
Uuid string `json:"uuid" url:"uuid,omitempty"`
|
||||
Answer string `json:"answer" url:"answer,omitempty"`
|
||||
}
|
@ -1,67 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/comment.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,94 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/comment.rs
|
||||
// Code generated by go.elara.ws/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
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/comment_reply.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/comment_report.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,131 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/community.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
ModeratorsURL Optional[string] `json:"moderators_url" url:"moderators_url,omitempty"`
|
||||
FeaturedURL Optional[string] `json:"featured_url" url:"featured_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"`
|
||||
ModeratorsURL Optional[string] `json:"moderators_url" url:"moderators_url,omitempty"`
|
||||
FeaturedURL Optional[string] `json:"featured_url" url:"featured_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"`
|
||||
ModeratorsURL Optional[string] `json:"moderators_url" url:"moderators_url,omitempty"`
|
||||
FeaturedURL Optional[string] `json:"featured_url" url:"featured_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"`
|
||||
}
|
@ -1,119 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/community.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/community_block.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/websocket/handlers/connect.rs
|
||||
// Code generated by go.elara.ws/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
|
||||
|
||||
package types
|
||||
|
||||
type Disconnect struct {
|
||||
ID int `json:"id" url:"id,omitempty"`
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/email_verification.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/federation_allowlist.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/federation_blocklist.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/instance.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/websocket/handlers/join_rooms.rs
|
||||
// Code generated by go.elara.ws/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
|
||||
|
||||
package types
|
||||
|
||||
type JoinPostRoom struct {
|
||||
PostID int `json:"post_id" url:"post_id,omitempty"`
|
||||
ID int `json:"id" url:"id,omitempty"`
|
||||
}
|
||||
type JoinCommunityRoom struct {
|
||||
CommunityID int `json:"community_id" url:"community_id,omitempty"`
|
||||
ID int `json:"id" url:"id,omitempty"`
|
||||
}
|
||||
type JoinModRoom struct {
|
||||
CommunityID int `json:"community_id" url:"community_id,omitempty"`
|
||||
ID int `json:"id" url:"id,omitempty"`
|
||||
}
|
||||
type JoinUserRoom struct {
|
||||
UserID int `json:"user_id" url:"user_id,omitempty"`
|
||||
ID int `json:"id" url:"id,omitempty"`
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/language.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,84 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/lib.rs
|
||||
// Code generated by go.elara.ws/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"
|
||||
)
|
@ -1,4 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/lib.rs
|
||||
// Code generated by go.elara.ws/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
|
||||
|
||||
package types
|
@ -1,87 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/local_site.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
ReportsEmailAdmins bool `json:"reports_email_admins" url:"reports_email_admins,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"`
|
||||
ReportsEmailAdmins Optional[bool] `json:"reports_email_admins" url:"reports_email_admins,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"`
|
||||
ReportsEmailAdmins Optional[bool] `json:"reports_email_admins" url:"reports_email_admins,omitempty"`
|
||||
Updated LemmyTime `json:"updated" url:"updated,omitempty"`
|
||||
}
|
||||
type RegistrationMode string
|
||||
|
||||
const (
|
||||
RegistrationModeClosed RegistrationMode = "Closed"
|
||||
RegistrationModeRequireApplication RegistrationMode = "RequireApplication"
|
||||
RegistrationModeOpen RegistrationMode = "Open"
|
||||
)
|
@ -1,53 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/local_site_rate_limit.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,79 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/local_user.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/websocket/handlers/messages.rs
|
||||
// Code generated by go.elara.ws/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
|
||||
|
||||
package types
|
||||
|
||||
type SendPostRoomMessage struct {
|
||||
PostID int `json:"post_id" url:"post_id,omitempty"`
|
||||
Message string `json:"message" url:"message,omitempty"`
|
||||
WebsocketID Optional[int] `json:"websocket_id" url:"websocket_id,omitempty"`
|
||||
}
|
||||
type SendCommunityRoomMessage struct {
|
||||
CommunityID int `json:"community_id" url:"community_id,omitempty"`
|
||||
Message string `json:"message" url:"message,omitempty"`
|
||||
WebsocketID Optional[int] `json:"websocket_id" url:"websocket_id,omitempty"`
|
||||
}
|
||||
type SendModRoomMessage struct {
|
||||
CommunityID int `json:"community_id" url:"community_id,omitempty"`
|
||||
Message string `json:"message" url:"message,omitempty"`
|
||||
WebsocketID Optional[int] `json:"websocket_id" url:"websocket_id,omitempty"`
|
||||
}
|
||||
type SendUserRoomMessage struct {
|
||||
RecipientID int `json:"recipient_id" url:"recipient_id,omitempty"`
|
||||
Message string `json:"message" url:"message,omitempty"`
|
||||
WebsocketID Optional[int] `json:"websocket_id" url:"websocket_id,omitempty"`
|
||||
}
|
||||
type SendAllMessage struct {
|
||||
Message string `json:"message" url:"message,omitempty"`
|
||||
WebsocketID Optional[int] `json:"websocket_id" url:"websocket_id,omitempty"`
|
||||
}
|
@ -1,103 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/websocket/mod.rs
|
||||
// Code generated by go.elara.ws/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"
|
||||
)
|
@ -1,4 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/mod.rs
|
||||
// Code generated by go.elara.ws/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
|
||||
|
||||
package types
|
@ -1,4 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/websocket/handlers/mod.rs
|
||||
// Code generated by go.elara.ws/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
|
||||
|
||||
package types
|
@ -1,207 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/moderator.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/websocket/handlers/online_users.rs
|
||||
// Code generated by go.elara.ws/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
|
||||
|
||||
package types
|
||||
|
||||
type GetPostUsersOnline struct {
|
||||
PostID int `json:"post_id" url:"post_id,omitempty"`
|
||||
}
|
||||
type GetCommunityUsersOnline struct {
|
||||
CommunityID int `json:"community_id" url:"community_id,omitempty"`
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/password_reset_request.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,105 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/person.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,210 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/person.rs
|
||||
// Code generated by go.elara.ws/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 {
|
||||
Auth Optional[string] `json:"auth" url:"auth,omitempty"`
|
||||
}
|
||||
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
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/person_block.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/person_mention.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,102 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/post.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,129 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/post.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/post_report.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/private_message.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,63 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/private_message.rs
|
||||
// Code generated by go.elara.ws/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
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/private_message_report.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/registration_application.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/request.rs
|
||||
// Code generated by go.elara.ws/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
|
||||
|
||||
package types
|
@ -1,9 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/secret.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/websocket/send.rs
|
||||
// Code generated by go.elara.ws/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
|
||||
|
||||
package types
|
@ -1,4 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/sensitive.rs
|
||||
// Code generated by go.elara.ws/go-lemmy/cmd/gen (struct generator). DO NOT EDIT.
|
||||
|
||||
package types
|
@ -1,48 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/site.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,243 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/site.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
ReportsEmailAdmins Optional[bool] `json:"reports_email_admins" url:"reports_email_admins,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 GetFederatedInstances struct {
|
||||
Auth Optional[string] `json:"auth" url:"auth,omitempty"`
|
||||
}
|
||||
type GetFederatedInstancesResponse struct {
|
||||
FederatedInstances Optional[FederatedInstances] `json:"federated_instances" url:"federated_instances,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
|
||||
}
|
@ -1,63 +0,0 @@
|
||||
// Source: lemmy/crates/db_views_actor/src/structs.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,87 +0,0 @@
|
||||
// Source: lemmy/crates/db_views/src/structs.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,95 +0,0 @@
|
||||
// Source: lemmy/crates/db_views_moderator/src/structs.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,72 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/aggregates/structs.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/websocket/structs.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
// Source: lemmy/crates/db_schema/src/source/tagline.rs
|
||||
// Code generated by go.elara.ws/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"`
|
||||
}
|
@ -1,85 +0,0 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
type LemmyResponse struct {
|
||||
Error Optional[string] `json:"error" url:"error,omitempty"`
|
||||
}
|
||||
|
||||
type HTTPError struct {
|
||||
Code int
|
||||
}
|
||||
|
||||
func (he HTTPError) Error() string {
|
||||
return fmt.Sprintf("%d %s", he.Code, http.StatusText(he.Code))
|
||||
}
|
||||
|
||||
type LemmyError struct {
|
||||
ErrStr string
|
||||
Code int
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
// Source: lemmy/crates/api_common/src/utils.rs
|
||||
// Code generated by go.elara.ws/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"
|
||||
)
|
214
websocket.go
214
websocket.go
@ -1,214 +0,0 @@
|
||||
package lemmy
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"reflect"
|
||||
"time"
|
||||
|
||||
"github.com/cenkalti/backoff/v4"
|
||||
"github.com/gorilla/websocket"
|
||||
"go.elara.ws/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
|
||||
}
|
Loading…
Reference in New Issue
Block a user