Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a4a015a4cc | |||
| a90e43691d | |||
| 54c27ff977 | |||
| 6074dcd419 | |||
| 7fc04591ba | |||
| 519c58f847 | |||
| a9f1b2d3bd | |||
| ba705b25f7 | |||
| 6ea2a3bf54 | |||
| 7c15588651 | |||
| 9beccacda1 | |||
| eaebd96419 | |||
| 61030d84a1 | |||
| a9c51dba33 | |||
| c9db49c367 | |||
| 2dbc8e9a85 | |||
| f29641ae13 |
@@ -1,3 +1 @@
|
||||
/test
|
||||
/gen
|
||||
/lemmy/
|
||||
|
||||
@@ -1,43 +1,31 @@
|
||||
# Go-Lemmy
|
||||
|
||||
[](https://pkg.go.dev/go.elara.ws/go-lemmy)
|
||||
[](https://pkg.go.dev/go.arsenm.dev/go-lemmy)
|
||||
|
||||
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).
|
||||
Go bindings to the [Lemmy](https://join-lemmy.org) API
|
||||
|
||||
Examples:
|
||||
Example:
|
||||
|
||||
- HTTP: [examples/http](examples/http)
|
||||
```go
|
||||
ctx := context.Background()
|
||||
|
||||
### How to generate
|
||||
c, err := lemmy.New("https://lemmy.ml")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
First, clone the [lemmy-js-client](https://github.com/LemmyNet/lemmy-js-client) repo at whatever version you need:
|
||||
err = c.Login(ctx, types.Login{
|
||||
UsernameOrEmail: "email@example.com",
|
||||
Password: `TestPwd`,
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
```bash
|
||||
git clone https://github.com/LemmyNet/lemmy-js-client -b 0.18.3
|
||||
_, err = c.SaveUserSettings(ctx, types.SaveUserSettings{
|
||||
BotAccount: types.NewOptional(true),
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
```
|
||||
|
||||
Inside it, build the JSON docs file:
|
||||
|
||||
```bash
|
||||
npm run docs -- --json docs.json
|
||||
```
|
||||
|
||||
Next, build the generator:
|
||||
|
||||
```bash
|
||||
go build ./cmd/gen
|
||||
```
|
||||
|
||||
Remove all the existing generated code:
|
||||
|
||||
```bash
|
||||
rm **/*.gen.go
|
||||
```
|
||||
|
||||
Execute the generator:
|
||||
|
||||
```bash
|
||||
./gen -json-file <path_to_docs.json> -out-dir .
|
||||
```
|
||||
|
||||
And that's it! Your generated code should be ready for use.
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
package lemmy
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"go.arsenm.dev/go-lemmy/types"
|
||||
)
|
||||
|
||||
func (c *Client) AddAdmin(ctx context.Context, d types.AddAdmin) (*types.AddAdminResponse, error) {
|
||||
ar := &types.AddAdminResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/admin/add", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) ApproveRegistrationApplication(ctx context.Context, d types.ApproveRegistrationApplication) (*types.RegistrationApplicationResponse, error) {
|
||||
ar := &types.RegistrationApplicationResponse{}
|
||||
res, err := c.req(ctx, http.MethodPut, "/admin/registration_application/approve", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) UnreadRegistrationApplicationCount(ctx context.Context, d types.GetUnreadRegistrationApplicationCount) (*types.GetUnreadRegistrationApplicationCountResponse, error) {
|
||||
ar := &types.GetUnreadRegistrationApplicationCountResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/admin/registration_application/count", nil, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) RegistrationApplications(ctx context.Context, d types.ListRegistrationApplications) (*types.ListRegistrationApplicationsResponse, error) {
|
||||
ar := &types.ListRegistrationApplicationsResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/admin/registration_application/list", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) PurgeComment(ctx context.Context, d types.PurgeComment) (*types.PurgeItemResponse, error) {
|
||||
ar := &types.PurgeItemResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/admin/purge/comment", nil, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) PurgeCommunity(ctx context.Context, d types.PurgeCommunity) (*types.PurgeItemResponse, error) {
|
||||
ar := &types.PurgeItemResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/admin/purge/community", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) PurgePerson(ctx context.Context, d types.PurgePerson) (*types.PurgeItemResponse, error) {
|
||||
ar := &types.PurgeItemResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/admin/purge/person", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) PurgePost(ctx context.Context, d types.PurgePost) (*types.PurgeItemResponse, error) {
|
||||
ar := &types.PurgeItemResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/admin/purge/post", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
@@ -1,192 +0,0 @@
|
||||
package extractor
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/tidwall/gjson"
|
||||
)
|
||||
|
||||
type Route struct {
|
||||
Name string
|
||||
Summary string
|
||||
Method string
|
||||
Path string
|
||||
ParamsName string
|
||||
ParamsID int64
|
||||
ReturnName string
|
||||
ReturnID int64
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
func New(path string) (*Extractor, error) {
|
||||
data, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &Extractor{gjson.ParseBytes(data)}, nil
|
||||
}
|
||||
|
||||
func (e *Extractor) Routes() []Route {
|
||||
var out []Route
|
||||
routes := e.root.Get("children.#.children.#(kind==2048)#|@flatten")
|
||||
for _, route := range routes.Array() {
|
||||
name := route.Get("name").String()
|
||||
signature := route.Get(`signatures.0`)
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
paramsID := signature.Get("parameters.0.type.target").Int()
|
||||
paramsName := signature.Get("parameters.0.type.name").String()
|
||||
returnID := signature.Get("type.typeArguments.0.target").Int()
|
||||
returnName := signature.Get("type.typeArguments.0.name").String()
|
||||
|
||||
out = append(out, Route{
|
||||
Name: name,
|
||||
Summary: summary,
|
||||
Method: method,
|
||||
Path: path,
|
||||
ParamsName: paramsName,
|
||||
ParamsID: paramsID,
|
||||
ReturnName: returnName,
|
||||
ReturnID: returnID,
|
||||
})
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func (e *Extractor) Structs(routes []Route) []Struct {
|
||||
var ids []int64
|
||||
for _, route := range routes {
|
||||
ids = append(ids, route.ParamsID)
|
||||
if route.ReturnID != 0 {
|
||||
ids = append(ids, route.ReturnID)
|
||||
}
|
||||
}
|
||||
|
||||
structs := map[int64]Struct{}
|
||||
e.getStructs(ids, structs)
|
||||
return getKeys(structs)
|
||||
}
|
||||
|
||||
func (e *Extractor) getStructs(ids []int64, structs map[int64]Struct) {
|
||||
for _, id := range ids {
|
||||
if _, ok := structs[id]; ok {
|
||||
continue
|
||||
}
|
||||
|
||||
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,
|
||||
}
|
||||
|
||||
e.getStructs(newIDs, structs)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
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":
|
||||
ids = append(ids, jfield.Get("type.elementType.target").Int())
|
||||
case "union":
|
||||
field.Type = "string"
|
||||
}
|
||||
} else {
|
||||
field.Type = jfield.Get("type.name").String()
|
||||
|
||||
switch jfield.Get("type.type").String() {
|
||||
case "reference":
|
||||
ids = append(ids, jfield.Get("type.target").Int())
|
||||
case "union":
|
||||
field.Type = "string"
|
||||
}
|
||||
}
|
||||
|
||||
fields = append(fields, field)
|
||||
}
|
||||
return fields, ids
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
func getKeys(m map[int64]Struct) []Struct {
|
||||
out := make([]Struct, len(m))
|
||||
i := 0
|
||||
for _, s := range m {
|
||||
out[i] = s
|
||||
i++
|
||||
}
|
||||
return out
|
||||
}
|
||||
@@ -1,89 +0,0 @@
|
||||
package generator
|
||||
|
||||
import (
|
||||
"io"
|
||||
"strings"
|
||||
|
||||
"github.com/dave/jennifer/jen"
|
||||
"go.elara.ws/go-lemmy/cmd/gen/extractor"
|
||||
)
|
||||
|
||||
type RoutesGenerator struct {
|
||||
w io.Writer
|
||||
PkgName string
|
||||
}
|
||||
|
||||
func NewRoutes(w io.Writer, pkgName string) *RoutesGenerator {
|
||||
return &RoutesGenerator{w, pkgName}
|
||||
}
|
||||
|
||||
func (r *RoutesGenerator) Generate(routes []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 {
|
||||
|
||||
f.Comment(r.Summary)
|
||||
f.Func().Params(
|
||||
jen.Id("c").Id("*Client"),
|
||||
).Id(transformName(r.Name)).Params(
|
||||
jen.Id("ctx").Qual("context", "Context"),
|
||||
jen.Id("data").Qual("go.elara.ws/go-lemmy/types", r.ParamsName),
|
||||
).ParamsFunc(func(g *jen.Group) {
|
||||
if r.ReturnName != "" {
|
||||
g.Op("*").Qual("go.elara.ws/go-lemmy/types", r.ReturnName)
|
||||
}
|
||||
g.Error()
|
||||
}).BlockFunc(func(g *jen.Group) {
|
||||
returnName := r.ReturnName
|
||||
if returnName == "" {
|
||||
returnName = "EmptyResponse"
|
||||
}
|
||||
|
||||
g.Id("resData").Op(":=").Op("&").Qual("go.elara.ws/go-lemmy/types", returnName).Block()
|
||||
|
||||
var funcName string
|
||||
switch r.Method {
|
||||
case "GET":
|
||||
funcName = "getReq"
|
||||
default:
|
||||
funcName = "req"
|
||||
}
|
||||
|
||||
g.List(jen.Id("res"), jen.Err()).Op(":=").Id("c").Dot(funcName).Params(
|
||||
jen.Id("ctx"), jen.Lit(r.Method), jen.Lit(r.Path), jen.Id("data"), jen.Op("&").Id("resData"),
|
||||
)
|
||||
g.If(jen.Err().Op("!=").Nil()).BlockFunc(func(g *jen.Group) {
|
||||
if returnName == "EmptyResponse" {
|
||||
g.Return(jen.Err())
|
||||
} else {
|
||||
g.Return(jen.Nil(), jen.Err())
|
||||
}
|
||||
})
|
||||
|
||||
g.Err().Op("=").Id("resError").Params(jen.Id("res"), jen.Id("resData").Dot("LemmyResponse"))
|
||||
g.If(jen.Err().Op("!=").Nil()).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())
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
return f.Render(r.w)
|
||||
}
|
||||
|
||||
func transformName(s string) string {
|
||||
s = strings.ToUpper(s[:1]) + s[1:]
|
||||
s = strings.TrimPrefix(s, "Get")
|
||||
s = strings.TrimPrefix(s, "List")
|
||||
return s
|
||||
}
|
||||
@@ -1,113 +0,0 @@
|
||||
package generator
|
||||
|
||||
import (
|
||||
"io"
|
||||
"strings"
|
||||
"unicode"
|
||||
|
||||
"github.com/dave/jennifer/jen"
|
||||
"go.elara.ws/go-lemmy/cmd/gen/extractor"
|
||||
)
|
||||
|
||||
type StructGenerator struct {
|
||||
w io.Writer
|
||||
PkgName string
|
||||
}
|
||||
|
||||
func NewStruct(w io.Writer, pkgName string) *StructGenerator {
|
||||
return &StructGenerator{w, pkgName}
|
||||
}
|
||||
|
||||
func (s *StructGenerator) Generate(items []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 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)).Id(getType(field)).Tag(map[string]string{
|
||||
"json": field.Name,
|
||||
"url": field.Name + ",omitempty",
|
||||
})
|
||||
}
|
||||
|
||||
if strings.HasSuffix(item.Name, "Response") {
|
||||
g.Id("LemmyResponse")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return f.Render(s.w)
|
||||
}
|
||||
|
||||
func getType(f extractor.Field) string {
|
||||
t := transformType(f.Name, f.Type)
|
||||
if f.IsArray {
|
||||
t = "[]" + t
|
||||
}
|
||||
if f.IsOptional {
|
||||
t = "Optional[" + t + "]"
|
||||
}
|
||||
return t
|
||||
}
|
||||
|
||||
func transformType(name, t string) string {
|
||||
// Some time fields are strings in the JS client,
|
||||
// use LemmyTime for those
|
||||
switch name {
|
||||
case "published", "updated":
|
||||
return "LemmyTime"
|
||||
}
|
||||
|
||||
switch t {
|
||||
case "number":
|
||||
return "float64"
|
||||
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",
|
||||
).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()
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"go.elara.ws/go-lemmy/cmd/gen/extractor"
|
||||
"go.elara.ws/go-lemmy/cmd/gen/generator"
|
||||
"go.elara.ws/logger"
|
||||
"go.elara.ws/logger/log"
|
||||
)
|
||||
|
||||
func init() {
|
||||
log.Logger = logger.NewPretty(os.Stderr)
|
||||
}
|
||||
|
||||
func main() {
|
||||
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()
|
||||
|
||||
e, err := extractor.New(*jsonFile)
|
||||
if err != nil {
|
||||
log.Fatal("Error creating extractor").Err(err).Send()
|
||||
}
|
||||
|
||||
routes := e.Routes()
|
||||
structs := e.Structs(routes)
|
||||
|
||||
err = os.MkdirAll(filepath.Join(*outDir, "types"), 0o755)
|
||||
if err != nil {
|
||||
log.Fatal("Error creating types directory").Err(err).Send()
|
||||
}
|
||||
|
||||
otf, err := os.Create(filepath.Join(*outDir, "types/types.gen.go"))
|
||||
if err != nil {
|
||||
log.Fatal("Error creating types output file").Err(err).Send()
|
||||
}
|
||||
defer otf.Close()
|
||||
|
||||
err = generator.NewStruct(otf, "types").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"))
|
||||
if err != nil {
|
||||
log.Fatal("Error creating routes output file").Err(err).Send()
|
||||
}
|
||||
defer orf.Close()
|
||||
|
||||
err = generator.NewRoutes(orf, "lemmy").Generate(routes)
|
||||
if err != nil {
|
||||
log.Fatal("Error generating output routes file").Err(err).Send()
|
||||
}
|
||||
}
|
||||
+158
@@ -0,0 +1,158 @@
|
||||
package lemmy
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"go.arsenm.dev/go-lemmy/types"
|
||||
)
|
||||
|
||||
func (c *Client) Comments(ctx context.Context, d types.GetComments) (*types.GetCommentsResponse, error) {
|
||||
ar := &types.GetCommentsResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/comment/list", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) CreateComment(ctx context.Context, d types.CreateComment) (*types.CommentResponse, error) {
|
||||
ar := &types.CommentResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/comment", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) CreateCommentReport(ctx context.Context, d types.CreateCommentReport) (*types.CommentReportResponse, error) {
|
||||
ar := &types.CommentReportResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/comment/report", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) DeleteComment(ctx context.Context, d types.DeleteComment) (*types.CommentResponse, error) {
|
||||
ar := &types.CommentResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/comment/delete", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) RemoveComment(ctx context.Context, d types.RemoveComment) (*types.CommentResponse, error) {
|
||||
ar := &types.CommentResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/comment/remove", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) EditComment(ctx context.Context, d types.EditComment) (*types.CommentResponse, error) {
|
||||
ar := &types.CommentResponse{}
|
||||
res, err := c.req(ctx, http.MethodPut, "/comment", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) LikeComment(ctx context.Context, d types.CreateCommentLike) (*types.CommentResponse, error) {
|
||||
ar := &types.CommentResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/comment/like", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) CommentReports(ctx context.Context, d types.ListCommentReports) (*types.ListCommentReportsResponse, error) {
|
||||
ar := &types.ListCommentReportsResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/comments/report/list", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) MarkCommentReplyAsRead(ctx context.Context, d types.MarkCommentReplyAsRead) (*types.CommentResponse, error) {
|
||||
ar := &types.CommentResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/comment/mark_as_read", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) SaveComment(ctx context.Context, d types.SaveComment) (*types.CommentResponse, error) {
|
||||
ar := &types.CommentResponse{}
|
||||
res, err := c.req(ctx, http.MethodPut, "/comment/save", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
+173
@@ -0,0 +1,173 @@
|
||||
package lemmy
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"go.arsenm.dev/go-lemmy/types"
|
||||
)
|
||||
|
||||
func (c *Client) AddModToCommunity(ctx context.Context, d types.AddModToCommunity) (*types.AddModToCommunityResponse, error) {
|
||||
ar := &types.AddModToCommunityResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/community/mod", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) BanFromCommunity(ctx context.Context, d types.BanFromCommunity) (*types.BanFromCommunityResponse, error) {
|
||||
ar := &types.BanFromCommunityResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/community/ban_user", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) BlockCommunity(ctx context.Context, d types.BlockCommunity) (*types.BlockCommunityResponse, error) {
|
||||
ar := &types.BlockCommunityResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/community/block", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) CreateCommunity(ctx context.Context, d types.CreateCommunity) (*types.CommunityResponse, error) {
|
||||
ar := &types.CommunityResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/community", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) EditCommunity(ctx context.Context, d types.EditCommunity) (*types.CommunityResponse, error) {
|
||||
ar := &types.CommunityResponse{}
|
||||
res, err := c.req(ctx, http.MethodPut, "/community", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) FollowCommunity(ctx context.Context, d types.FollowCommunity) (*types.CommunityResponse, error) {
|
||||
ar := &types.CommunityResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/community/follow", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) DeleteCommunity(ctx context.Context, d types.DeleteCommunity) (*types.CommunityResponse, error) {
|
||||
ar := &types.CommunityResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/community/delete", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) RemoveCommunity(ctx context.Context, d types.RemoveCommunity) (*types.CommunityResponse, error) {
|
||||
ar := &types.CommunityResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/community/remove", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) Community(ctx context.Context, d types.GetCommunity) (*types.GetCommunityResponse, error) {
|
||||
ar := &types.GetCommunityResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/community", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) Communities(ctx context.Context, d types.ListCommunities) (*types.ListCommunitiesResponse, error) {
|
||||
ar := &types.ListCommunitiesResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/community/list", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) TransferCommunity(ctx context.Context, d types.TransferCommunity) (*types.GetCommunityResponse, error) {
|
||||
ar := &types.GetCommunityResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/community/transfer", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
package main
|
||||
|
||||
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")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
err = c.ClientLogin(ctx, types.Login{
|
||||
UsernameOrEmail: "user@example.com",
|
||||
Password: `TestPwd`,
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
_, err = c.SaveUserSettings(ctx, types.SaveUserSettings{
|
||||
BotAccount: types.NewOptional(true),
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
@@ -1,20 +1,14 @@
|
||||
module go.elara.ws/go-lemmy
|
||||
module go.arsenm.dev/go-lemmy
|
||||
|
||||
go 1.19
|
||||
|
||||
require (
|
||||
github.com/dave/jennifer v1.6.0
|
||||
github.com/google/go-querystring v1.1.0
|
||||
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
|
||||
github.com/mitchellh/mapstructure v1.5.0
|
||||
github.com/recws-org/recws v1.4.0
|
||||
)
|
||||
|
||||
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
|
||||
github.com/gorilla/websocket v1.4.2 // indirect
|
||||
github.com/jpillora/backoff v1.0.0 // indirect
|
||||
)
|
||||
|
||||
@@ -1,37 +1,13 @@
|
||||
github.com/dave/jennifer v1.6.0 h1:MQ/6emI2xM7wt0tJzJzyUik2Q3Tcn2eE0vtYgh4GPVI=
|
||||
github.com/dave/jennifer v1.6.0/go.mod h1:AxTG893FiZKqxy3FP1kL80VMshSMuz2G+EgvszgGRnk=
|
||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
|
||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
|
||||
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
|
||||
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
|
||||
github.com/gookit/color v1.5.1 h1:Vjg2VEcdHpwq+oY63s/ksHrgJYCTo0bwWvmmYWdE9fQ=
|
||||
github.com/gookit/color v1.5.1/go.mod h1:wZFzea4X8qN6vHOSP2apMb4/+w/orMznEzYsIHPaqKM=
|
||||
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
|
||||
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.7.2/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=
|
||||
go.elara.ws/logger v0.0.0-20230421022458-e80700db2090/go.mod h1:qng49owViqsW5Aey93lwBXONw20oGbJIoLVscB16mPM=
|
||||
golang.org/x/exp v0.0.0-20230105000112-eab7a2c85304 h1:YUqj+XKtfrn3kXjFIiZ8jwKROD7ioAOOHUuo3ZZ2opc=
|
||||
golang.org/x/exp v0.0.0-20230105000112-eab7a2c85304/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
|
||||
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=
|
||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
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/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA=
|
||||
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
||||
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
||||
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||
github.com/recws-org/recws v1.4.0 h1:y9LLddtAicjejikNZXiaY9DQjIwcAQ82acd1XU6n0lU=
|
||||
github.com/recws-org/recws v1.4.0/go.mod h1:7+NQkTmBdU98VSzkzq9/P7+X0xExioUVBx9OeRKQIkk=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
||||
@@ -10,22 +10,19 @@ import (
|
||||
"reflect"
|
||||
|
||||
"github.com/google/go-querystring/query"
|
||||
"go.elara.ws/go-lemmy/types"
|
||||
"go.arsenm.dev/go-lemmy/types"
|
||||
)
|
||||
|
||||
// Client is a client for Lemmy's HTTP API
|
||||
type Client struct {
|
||||
client *http.Client
|
||||
baseURL *url.URL
|
||||
Token string
|
||||
token string
|
||||
}
|
||||
|
||||
// New creates a new Lemmy client with the default HTTP client.
|
||||
func New(baseURL string) (*Client, error) {
|
||||
return NewWithClient(baseURL, http.DefaultClient)
|
||||
}
|
||||
|
||||
// NewWithClient creates a new Lemmy client with the given HTTP client
|
||||
func NewWithClient(baseURL string, client *http.Client) (*Client, error) {
|
||||
u, err := url.Parse(baseURL)
|
||||
if err != nil {
|
||||
@@ -36,20 +33,31 @@ func NewWithClient(baseURL string, client *http.Client) (*Client, error) {
|
||||
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)
|
||||
func (c *Client) Login(ctx context.Context, l types.Login) error {
|
||||
var lr types.LoginResponse
|
||||
res, err := c.req(ctx, http.MethodPost, "/user/login", l, &lr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
c.Token = lr.JWT.MustValue()
|
||||
err = resError(res, lr.LemmyResponse)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
c.token = lr.JWT.MustValue()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// req makes a request to the server
|
||||
func (c *Client) Token() string {
|
||||
return c.token
|
||||
}
|
||||
|
||||
func (c *Client) SetToken(t string) {
|
||||
c.token = t
|
||||
}
|
||||
|
||||
func (c *Client) req(ctx context.Context, method string, path string, data, resp any) (*http.Response, error) {
|
||||
data = c.setAuth(data)
|
||||
|
||||
@@ -90,9 +98,6 @@ func (c *Client) req(ctx context.Context, method string, path string, data, resp
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// getReq makes a get request to the Lemmy server.
|
||||
// It is separate from req() because it uses query
|
||||
// parameters rather than a JSON request body.
|
||||
func (c *Client) getReq(ctx context.Context, method string, path string, data, resp any) (*http.Response, error) {
|
||||
data = c.setAuth(data)
|
||||
|
||||
@@ -129,7 +134,6 @@ 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{
|
||||
@@ -145,11 +149,6 @@ func resError(res *http.Response, lr types.LemmyResponse) error {
|
||||
}
|
||||
}
|
||||
|
||||
// setAuth uses reflection to automatically
|
||||
// set struct fields called Auth of type
|
||||
// string or types.Optional[string] to the
|
||||
// authentication token, then returns the
|
||||
// updated struct
|
||||
func (c *Client) setAuth(data any) any {
|
||||
if data == nil {
|
||||
return data
|
||||
@@ -165,10 +164,10 @@ func (c *Client) setAuth(data any) any {
|
||||
|
||||
switch authField.Type().String() {
|
||||
case "string":
|
||||
authField.SetString(c.Token)
|
||||
authField.SetString(c.token)
|
||||
case "types.Optional[string]":
|
||||
setMtd := authField.MethodByName("Set")
|
||||
out := setMtd.Call([]reflect.Value{reflect.ValueOf(c.Token)})
|
||||
out := setMtd.Call([]reflect.Value{reflect.ValueOf(c.token)})
|
||||
authField.Set(out[0])
|
||||
default:
|
||||
return data
|
||||
|
||||
@@ -0,0 +1,301 @@
|
||||
package lemmy
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"go.arsenm.dev/go-lemmy/types"
|
||||
)
|
||||
|
||||
func (c *Client) BanPerson(ctx context.Context, d types.BanPerson) (*types.BanPersonResponse, error) {
|
||||
ar := &types.BanPersonResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/user/ban", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) BlockPerson(ctx context.Context, d types.BlockPerson) (*types.BlockPersonResponse, error) {
|
||||
ar := &types.BlockPersonResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/user/block", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) ChangePassword(ctx context.Context, d types.ChangePassword) (*types.LoginResponse, error) {
|
||||
ar := &types.LoginResponse{}
|
||||
res, err := c.req(ctx, http.MethodPut, "/user/change_password", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
c.token = ar.JWT.MustValue()
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) DeleteAccount(ctx context.Context, d types.DeleteAccount) (*types.DeleteAccountResponse, error) {
|
||||
ar := &types.DeleteAccountResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/user/delete_account", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) BannedPersons(ctx context.Context, d types.GetBannedPersons) (*types.BannedPersonsResponse, error) {
|
||||
ar := &types.BannedPersonsResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/user/banned", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) Captcha(ctx context.Context, d types.GetCaptcha) (*types.CaptchaResponse, error) {
|
||||
ar := &types.CaptchaResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/user/get_captcha", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) PersonDetails(ctx context.Context, d types.GetPersonDetails) (*types.GetPersonDetailsResponse, error) {
|
||||
ar := &types.GetPersonDetailsResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/user", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) PersonMentions(ctx context.Context, d types.GetPersonMentions) (*types.GetPersonMentionsResponse, error) {
|
||||
ar := &types.GetPersonMentionsResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/user/mention", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) Replies(ctx context.Context, d types.GetReplies) (*types.GetRepliesResponse, error) {
|
||||
ar := &types.GetRepliesResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/user/replies", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) ReportCount(ctx context.Context, d types.GetReportCount) (*types.GetReportCountResponse, error) {
|
||||
ar := &types.GetReportCountResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/user/report_count", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) UnreadCount(ctx context.Context, d types.GetUnreadCount) (*types.GetUnreadCountResponse, error) {
|
||||
ar := &types.GetUnreadCountResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/user/unread_count", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) LeaveAdmin(ctx context.Context, d types.LeaveAdmin) (*types.GetSiteResponse, error) {
|
||||
ar := &types.GetSiteResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/user/leave_admin", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) MarkAllAsRead(ctx context.Context, d types.MarkAllAsRead) (*types.GetRepliesResponse, error) {
|
||||
ar := &types.GetRepliesResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/user/mark_all_as_read", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) MarkPersonMentionAsRead(ctx context.Context, d types.MarkPersonMentionAsRead) (*types.PersonMentionResponse, error) {
|
||||
ar := &types.PersonMentionResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/user/mention/mark_as_read", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) PasswordChange(ctx context.Context, d types.PasswordChange) (*types.LoginResponse, error) {
|
||||
ar := &types.LoginResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/user/password_change", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
c.token = ar.JWT.MustValue()
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) PasswordReset(ctx context.Context, d types.PasswordReset) (*types.PasswordResetResponse, error) {
|
||||
ar := &types.PasswordResetResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/user/password_reset", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) Register(ctx context.Context, d types.Register) (*types.LoginResponse, error) {
|
||||
ar := &types.LoginResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/user/register", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
c.token = ar.JWT.MustValue()
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) SaveUserSettings(ctx context.Context, d types.SaveUserSettings) (*types.LoginResponse, error) {
|
||||
ar := &types.LoginResponse{}
|
||||
res, err := c.req(ctx, http.MethodPut, "/user/save_user_settings", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
c.token = ar.JWT.MustValue()
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) VerifyEmail(ctx context.Context, d types.VerifyEmail) (*types.VerifyEmailResponse, error) {
|
||||
ar := &types.VerifyEmailResponse{}
|
||||
res, err := c.req(ctx, http.MethodPut, "/user/verify_email", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
@@ -0,0 +1,233 @@
|
||||
package lemmy
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"go.arsenm.dev/go-lemmy/types"
|
||||
)
|
||||
|
||||
func (c *Client) CreatePost(ctx context.Context, d types.CreatePost) (*types.PostResponse, error) {
|
||||
ar := &types.PostResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/post", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) EditPost(ctx context.Context, d types.EditPost) (*types.PostResponse, error) {
|
||||
ar := &types.PostResponse{}
|
||||
res, err := c.req(ctx, http.MethodPut, "/post", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) Post(ctx context.Context, d types.GetPost) (*types.GetPostResponse, error) {
|
||||
ar := &types.GetPostResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/post", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) CreatePostReport(ctx context.Context, d types.CreatePostReport) (*types.PostReportResponse, error) {
|
||||
ar := &types.PostReportResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/post/report", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) DeletePost(ctx context.Context, d types.DeletePost) (*types.PostResponse, error) {
|
||||
ar := &types.PostResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/post/delete", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) RemovePost(ctx context.Context, d types.RemovePost) (*types.PostResponse, error) {
|
||||
ar := &types.PostResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/post/remove", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) Posts(ctx context.Context, d types.GetPosts) (*types.GetPostsResponse, error) {
|
||||
ar := &types.GetPostsResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/post/list", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) SiteMetadata(ctx context.Context, d types.GetSiteMetadata) (*types.GetSiteMetadataResponse, error) {
|
||||
ar := &types.GetSiteMetadataResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/post/site_metadata", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) LikePost(ctx context.Context, d types.CreatePostLike) (*types.PostResponse, error) {
|
||||
ar := &types.PostResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/post/like", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) PostReports(ctx context.Context, d types.ListPostReports) (*types.ListPostReportsResponse, error) {
|
||||
ar := &types.ListPostReportsResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/post/report/list", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) LockPost(ctx context.Context, d types.LockPost) (*types.PostResponse, error) {
|
||||
ar := &types.PostResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/post/lock", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) MarkPostAsRead(ctx context.Context, d types.MarkPostAsRead) (*types.PostResponse, error) {
|
||||
ar := &types.PostResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/post/mark_as_read", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) ResolvePostReport(ctx context.Context, d types.ResolvePostReport) (*types.PostReportResponse, error) {
|
||||
ar := &types.PostReportResponse{}
|
||||
res, err := c.req(ctx, http.MethodPut, "/post/report/resolve", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) SavePost(ctx context.Context, d types.SavePost) (*types.PostResponse, error) {
|
||||
ar := &types.PostResponse{}
|
||||
res, err := c.req(ctx, http.MethodPut, "/post/save", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) StickyPost(ctx context.Context, d types.StickyPost) (*types.PostResponse, error) {
|
||||
ar := &types.PostResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/post/sticky", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
package lemmy
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"go.arsenm.dev/go-lemmy/types"
|
||||
)
|
||||
|
||||
func (c *Client) CreatePrivateMessage(ctx context.Context, d types.CreatePrivateMessage) (*types.PrivateMessageResponse, error) {
|
||||
ar := &types.PrivateMessageResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/private_message", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) CreatePrivateMessageReport(ctx context.Context, d types.CreatePrivateMessageReport) (*types.PrivateMessageReportResponse, error) {
|
||||
ar := &types.PrivateMessageReportResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/private_message/report", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) DeletePrivateMessage(ctx context.Context, d types.DeletePrivateMessage) (*types.PrivateMessageResponse, error) {
|
||||
ar := &types.PrivateMessageResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/private_message/delete", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) EditPrivateMessage(ctx context.Context, d types.EditPrivateMessage) (*types.PrivateMessageResponse, error) {
|
||||
ar := &types.PrivateMessageResponse{}
|
||||
res, err := c.req(ctx, http.MethodPut, "/private_message", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) PrivateMessages(ctx context.Context, d types.GetPrivateMessages) (*types.PrivateMessagesResponse, error) {
|
||||
ar := &types.PrivateMessagesResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/private_message/list", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) PrivateMessageReports(ctx context.Context, d types.ListPrivateMessageReports) (*types.ListPrivateMessageReportsResponse, error) {
|
||||
ar := &types.ListPrivateMessageReportsResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/private_message/report/list", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) MarkPrivateMessageAsRead(ctx context.Context, d types.MarkPrivateMessageAsRead) (*types.PrivateMessageResponse, error) {
|
||||
ar := &types.PrivateMessageResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/private_message/mark_as_read", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) ResolvePrivateMessageReport(ctx context.Context, d types.ResolvePrivateMessageReport) (*types.PrivateMessageReportResponse, error) {
|
||||
ar := &types.PrivateMessageReportResponse{}
|
||||
res, err := c.req(ctx, http.MethodPut, "/private_message/report/resolve", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
-1198
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,23 @@
|
||||
package lemmy
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"go.arsenm.dev/go-lemmy/types"
|
||||
)
|
||||
|
||||
func (c *Client) Search(ctx context.Context, d types.Search) (*types.SearchResponse, error) {
|
||||
ar := &types.SearchResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/search", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package lemmy
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"go.arsenm.dev/go-lemmy/types"
|
||||
)
|
||||
|
||||
func (c *Client) CreateSite(ctx context.Context, d types.CreateSite) (*types.SiteResponse, error) {
|
||||
ar := &types.SiteResponse{}
|
||||
res, err := c.req(ctx, http.MethodPost, "/site", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) EditSite(ctx context.Context, d types.EditSite) (*types.SiteResponse, error) {
|
||||
ar := &types.SiteResponse{}
|
||||
res, err := c.req(ctx, http.MethodPut, "/site", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
func (c *Client) Site(ctx context.Context, d types.GetSite) (*types.GetSiteResponse, error) {
|
||||
ar := &types.GetSiteResponse{}
|
||||
res, err := c.getReq(ctx, http.MethodGet, "/site", d, &ar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = resError(res, ar.LemmyResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package types
|
||||
|
||||
type PersonAggregates struct {
|
||||
ID int `json:"id" url:"id,omitempty"`
|
||||
PersonID int `json:"person_id" url:"person_id,omitempty"`
|
||||
PostCount int `json:"post_count" url:"post_count,omitempty"`
|
||||
PostScore int `json:"post_score" url:"post_score,omitempty"`
|
||||
CommentCount int `json:"comment_count" url:"comment_count,omitempty"`
|
||||
CommentScore int `json:"comment_score" url:"comment_score,omitempty"`
|
||||
}
|
||||
|
||||
type SiteAggregates struct {
|
||||
ID int `json:"id" url:"id,omitempty"`
|
||||
SiteID int `json:"site_id" url:"site_id,omitempty"`
|
||||
Users int `json:"users" url:"users,omitempty"`
|
||||
Posts int `json:"posts" url:"posts,omitempty"`
|
||||
Comments int `json:"comments" url:"comments,omitempty"`
|
||||
Communities int `json:"communities" url:"communities,omitempty"`
|
||||
UsersActiveDay int `json:"users_active_day" url:"users_active_day,omitempty"`
|
||||
UsersActiveWeek int `json:"users_active_week" url:"users_active_week,omitempty"`
|
||||
UsersActiveMonth int `json:"users_active_month" url:"users_active_month,omitempty"`
|
||||
UsersActiveHalfYear int `json:"users_active_half_year" url:"users_active_half_year,omitempty"`
|
||||
}
|
||||
|
||||
type PostAggregates struct {
|
||||
ID int `json:"id" url:"id,omitempty"`
|
||||
PostID int `json:"post_id" url:"post_id,omitempty"`
|
||||
Comments int `json:"comments" url:"comments,omitempty"`
|
||||
Score int `json:"score" url:"score,omitempty"`
|
||||
Upvotes int `json:"upvotes" url:"upvotes,omitempty"`
|
||||
Downvotes int `json:"downvotes" url:"downvotes,omitempty"`
|
||||
NewestCommentTimeNecro string `json:"newest_comment_time_necro" url:"newest_comment_time_necro,omitempty"`
|
||||
NewestCommentTime string `json:"newest_comment_time" url:"newest_comment_time,omitempty"`
|
||||
}
|
||||
|
||||
type CommunityAggregates struct {
|
||||
ID int `json:"id" url:"id,omitempty"`
|
||||
CommunityID int `json:"community_id" url:"community_id,omitempty"`
|
||||
Subscribers int `json:"subscribers" url:"subscribers,omitempty"`
|
||||
Posts int `json:"posts" url:"posts,omitempty"`
|
||||
Comments int `json:"comments" url:"comments,omitempty"`
|
||||
UsersActiveDay int `json:"users_active_day" url:"users_active_day,omitempty"`
|
||||
UsersActiveWeek int `json:"users_active_week" url:"users_active_week,omitempty"`
|
||||
UsersActiveMonth int `json:"users_active_month" url:"users_active_month,omitempty"`
|
||||
UsersActiveHalfYear int `json:"users_active_half_year" url:"users_active_half_year,omitempty"`
|
||||
}
|
||||
|
||||
type CommentAggregates struct {
|
||||
ID int `json:"id" url:"id,omitempty"`
|
||||
CommentID int `json:"comment_id" url:"comment_id,omitempty"`
|
||||
Score int `json:"score" url:"score,omitempty"`
|
||||
Upvotes int `json:"upvotes" url:"upvotes,omitempty"`
|
||||
Downvotes int `json:"downvotes" url:"downvotes,omitempty"`
|
||||
ChildCount int `json:"child_count" url:"child_count,omitempty"`
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
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_i_ds" url:"recipient_i_ds,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[int] `json:"max_depth" url:"max_depth,omitempty"`
|
||||
Page Optional[int] `json:"page" url:"page,omitempty"`
|
||||
Limit Optional[int] `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[int] `json:"page" url:"page,omitempty"`
|
||||
Limit Optional[int] `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
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
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"`
|
||||
Auth string `json:"auth" url:"auth,omitempty"`
|
||||
}
|
||||
|
||||
type CommunityResponse struct {
|
||||
CommunityView CommunityView `json:"community_view" url:"community_view,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"`
|
||||
}
|
||||
@@ -66,14 +66,6 @@ func (o Optional[T]) ValueOr(fallback T) T {
|
||||
return fallback
|
||||
}
|
||||
|
||||
func (o Optional[T]) ValueOrEmpty() T {
|
||||
if o.value != nil {
|
||||
return *o.value
|
||||
}
|
||||
var value T
|
||||
return value
|
||||
}
|
||||
|
||||
func (o Optional[T]) MarshalJSON() ([]byte, error) {
|
||||
return json.Marshal(o.value)
|
||||
}
|
||||
|
||||
+162
@@ -0,0 +1,162 @@
|
||||
package types
|
||||
|
||||
type UserOperation string
|
||||
|
||||
const (
|
||||
UserOpLogin UserOperation = "Login"
|
||||
UserOpRegister UserOperation = "Register"
|
||||
UserOpGetCaptcha UserOperation = "GetCaptcha"
|
||||
UserOpCreateCommunity UserOperation = "CreateCommunity"
|
||||
UserOpCreatePost UserOperation = "CreatePost"
|
||||
UserOpListCommunities UserOperation = "ListCommunities"
|
||||
UserOpGetPost UserOperation = "GetPost"
|
||||
UserOpGetCommunity UserOperation = "GetCommunity"
|
||||
UserOpCreateComment UserOperation = "CreateComment"
|
||||
UserOpEditComment UserOperation = "EditComment"
|
||||
UserOpDeleteComment UserOperation = "DeleteComment"
|
||||
UserOpRemoveComment UserOperation = "RemoveComment"
|
||||
UserOpSaveComment UserOperation = "SaveComment"
|
||||
UserOpCreateCommentLike UserOperation = "CreateCommentLike"
|
||||
UserOpGetPosts UserOperation = "GetPosts"
|
||||
UserOpCreatePostLike UserOperation = "CreatePostLike"
|
||||
UserOpEditPost UserOperation = "EditPost"
|
||||
UserOpDeletePost UserOperation = "DeletePost"
|
||||
UserOpRemovePost UserOperation = "RemovePost"
|
||||
UserOpLockPost UserOperation = "LockPost"
|
||||
UserOpFeaturePost UserOperation = "FeaturePost"
|
||||
UserOpMarkPostAsRead UserOperation = "MarkPostAsRead"
|
||||
UserOpSavePost UserOperation = "SavePost"
|
||||
UserOpEditCommunity UserOperation = "EditCommunity"
|
||||
UserOpDeleteCommunity UserOperation = "DeleteCommunity"
|
||||
UserOpRemoveCommunity UserOperation = "RemoveCommunity"
|
||||
UserOpFollowCommunity UserOperation = "FollowCommunity"
|
||||
UserOpGetPersonDetails UserOperation = "GetPersonDetails"
|
||||
UserOpGetReplies UserOperation = "GetReplies"
|
||||
UserOpGetPersonMentions UserOperation = "GetPersonMentions"
|
||||
UserOpMarkPersonMentionAsRead UserOperation = "MarkPersonMentionAsRead"
|
||||
UserOpMarkCommentReplyAsRead UserOperation = "MarkCommentReplyAsRead"
|
||||
UserOpGetModlog UserOperation = "GetModlog"
|
||||
UserOpBanFromCommunity UserOperation = "BanFromCommunity"
|
||||
UserOpAddModToCommunity UserOperation = "AddModToCommunity"
|
||||
UserOpCreateSite UserOperation = "CreateSite"
|
||||
UserOpEditSite UserOperation = "EditSite"
|
||||
UserOpGetSite UserOperation = "GetSite"
|
||||
UserOpAddAdmin UserOperation = "AddAdmin"
|
||||
UserOpGetUnreadRegistrationApplicationCount UserOperation = "GetUnreadRegistrationApplicationCount"
|
||||
UserOpListRegistrationApplications UserOperation = "ListRegistrationApplications"
|
||||
UserOpApproveRegistrationApplication UserOperation = "ApproveRegistrationApplication"
|
||||
UserOpBanPerson UserOperation = "BanPerson"
|
||||
UserOpGetBannedPersons UserOperation = "GetBannedPersons"
|
||||
UserOpSearch UserOperation = "Search"
|
||||
UserOpResolveObject UserOperation = "ResolveObject"
|
||||
UserOpMarkAllAsRead UserOperation = "MarkAllAsRead"
|
||||
UserOpSaveUserSettings UserOperation = "SaveUserSettings"
|
||||
UserOpTransferCommunity UserOperation = "TransferCommunity"
|
||||
UserOpLeaveAdmin UserOperation = "LeaveAdmin"
|
||||
UserOpDeleteAccount UserOperation = "DeleteAccount"
|
||||
UserOpPasswordReset UserOperation = "PasswordReset"
|
||||
UserOpPasswordChange UserOperation = "PasswordChange"
|
||||
UserOpCreatePrivateMessage UserOperation = "CreatePrivateMessage"
|
||||
UserOpEditPrivateMessage UserOperation = "EditPrivateMessage"
|
||||
UserOpDeletePrivateMessage UserOperation = "DeletePrivateMessage"
|
||||
UserOpMarkPrivateMessageAsRead UserOperation = "MarkPrivateMessageAsRead"
|
||||
UserOpCreatePrivateMessageReport UserOperation = "CreatePrivateMessageReport"
|
||||
UserOpResolvePrivateMessageReport UserOperation = "ResolvePrivateMessageReport"
|
||||
UserOpListPrivateMessageReports UserOperation = "ListPrivateMessageReports"
|
||||
UserOpGetPrivateMessages UserOperation = "GetPrivateMessages"
|
||||
UserOpUserJoin UserOperation = "UserJoin"
|
||||
UserOpGetComments UserOperation = "GetComments"
|
||||
UserOpPostJoin UserOperation = "PostJoin"
|
||||
UserOpCommunityJoin UserOperation = "CommunityJoin"
|
||||
UserOpChangePassword UserOperation = "ChangePassword"
|
||||
UserOpGetSiteMetadata UserOperation = "GetSiteMetadata"
|
||||
UserOpBlockCommunity UserOperation = "BlockCommunity"
|
||||
UserOpBlockPerson UserOperation = "BlockPerson"
|
||||
UserOpPurgePerson UserOperation = "PurgePerson"
|
||||
UserOpPurgeCommunity UserOperation = "PurgeCommunity"
|
||||
UserOpPurgePost UserOperation = "PurgePost"
|
||||
UserOpPurgeComment UserOperation = "PurgeComment"
|
||||
UserOpCreateCommentReport UserOperation = "CreateCommentReport"
|
||||
UserOpResolveCommentReport UserOperation = "ResolveCommentReport"
|
||||
UserOpListCommentReports UserOperation = "ListCommentReports"
|
||||
UserOpCreatePostReport UserOperation = "CreatePostReport"
|
||||
UserOpResolvePostReport UserOperation = "ResolvePostReport"
|
||||
UserOpListPostReports UserOperation = "ListPostReports"
|
||||
UserOpGetReportCount UserOperation = "GetReportCount"
|
||||
UserOpGetUnreadCount UserOperation = "GetUnreadCount"
|
||||
UserOpVerifyEmail UserOperation = "VerifyEmail"
|
||||
)
|
||||
|
||||
type SortType string
|
||||
|
||||
const (
|
||||
Active SortType = "Active"
|
||||
Hot SortType = "Hot"
|
||||
New SortType = "New"
|
||||
Old SortType = "Old"
|
||||
TopDay SortType = "TopDay"
|
||||
TopWeek SortType = "TopWeek"
|
||||
TopMonth SortType = "TopMonth"
|
||||
TopYear SortType = "TopYear"
|
||||
TopAll SortType = "TopAll"
|
||||
MostComments SortType = "MostComments"
|
||||
NewComments SortType = "NewComments"
|
||||
)
|
||||
|
||||
type CommentSortType string
|
||||
|
||||
const (
|
||||
CommentSortHot CommentSortType = "Hot"
|
||||
CommentSortTop CommentSortType = "Top"
|
||||
CommentSortNew CommentSortType = "New"
|
||||
CommentSortOld CommentSortType = "Old"
|
||||
)
|
||||
|
||||
type ListingType string
|
||||
|
||||
const (
|
||||
ListingAll ListingType = "All"
|
||||
ListingLocal ListingType = "Local"
|
||||
ListingSubscribed ListingType = "Subscribed"
|
||||
ListingCommunity ListingType = "Community"
|
||||
)
|
||||
|
||||
type SearchType string
|
||||
|
||||
const (
|
||||
SearchAll SearchType = "All"
|
||||
SearchComments SearchType = "Comments"
|
||||
SearchPosts SearchType = "Posts"
|
||||
SearchCommunities SearchType = "Communities"
|
||||
SearchUsers SearchType = "Users"
|
||||
SearchURL SearchType = "URL"
|
||||
)
|
||||
|
||||
type ModlogActionType string
|
||||
|
||||
const (
|
||||
ModlogAll ModlogActionType = "All"
|
||||
ModlogModRemovePost ModlogActionType = "ModRemovePost"
|
||||
ModlogModLockPost ModlogActionType = "ModLockPost"
|
||||
ModlogModStickyPost ModlogActionType = "ModStickyPost"
|
||||
ModlogModRemoveComment ModlogActionType = "ModRemoveComment"
|
||||
ModlogModRemoveCommunity ModlogActionType = "ModRemoveCommunity"
|
||||
ModlogModBanFromCommunity ModlogActionType = "ModBanFromCommunity"
|
||||
ModlogModAddCommunity ModlogActionType = "ModAddCommunity"
|
||||
ModlogModTransferCommunity ModlogActionType = "ModTransferCommunity"
|
||||
ModlogModAdd ModlogActionType = "ModAdd"
|
||||
ModlogModBan ModlogActionType = "ModBan"
|
||||
ModlogModHideCommunity ModlogActionType = "ModHideCommunity"
|
||||
ModlogAdminPurgePerson ModlogActionType = "AdminPurgePerson"
|
||||
ModlogAdminPurgeCommunity ModlogActionType = "AdminPurgeCommunity"
|
||||
ModlogAdminPurgePost ModlogActionType = "AdminPurgePost"
|
||||
ModlogAdminPurgeComment ModlogActionType = "AdminPurgeComment"
|
||||
)
|
||||
|
||||
type SubscribedType string
|
||||
|
||||
const (
|
||||
Subscribed SubscribedType = "Subscribed"
|
||||
NotSubscribed SubscribedType = "NotSubscribed"
|
||||
Pending SubscribedType = "Pending"
|
||||
)
|
||||
+243
@@ -0,0 +1,243 @@
|
||||
package types
|
||||
|
||||
type Login struct {
|
||||
Password string `json:"password" url:"password,omitempty"`
|
||||
UsernameOrEmail string `json:"username_or_email" url:"username_or_email,omitempty"`
|
||||
}
|
||||
|
||||
type LoginResponse struct {
|
||||
JWT Optional[string] `json:"jwt" url:"jwt,omitempty"`
|
||||
RegistrationCreated bool `json:"registration_created" url:"registration_created,omitempty"`
|
||||
VeriftEmailSent bool `json:"verify_email_sent" url:"verify_email_sent,omitempty"`
|
||||
LemmyResponse
|
||||
}
|
||||
|
||||
type Register struct {
|
||||
Username string `json:"username" url:"username,omitempty"`
|
||||
Password string `json:"password" url:"password,omitempty"`
|
||||
PasswordVerify string `json:"password_verify" url:"password_verify,omitempty"`
|
||||
ShowNSFW bool `json:"show_nsfw" url:"show_nsfw,omitempty"`
|
||||
Email Optional[string] `json:"email" url:"email,omitempty"`
|
||||
CaptchaUuid Optional[string] `json:"captcha_uuid" url:"captcha_uuid,omitempty"`
|
||||
CaptchaAnswer Optional[string] `json:"captcha_answer" url:"captcha_answer,omitempty"`
|
||||
Honeypot Optional[string] `json:"honeypot" url:"honeypot,omitempty"`
|
||||
Answer Optional[string] `json:"answer" url:"answer,omitempty"`
|
||||
}
|
||||
|
||||
type GetCaptcha struct{}
|
||||
|
||||
type 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 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 GetReplies struct {
|
||||
Limit Optional[int] `json:"limit" url:"limit,omitempty"`
|
||||
Page Optional[int] `json:"page" url:"page,omitempty"`
|
||||
Sort Optional[CommentSortType] `json:"sort" url:"sort,omitempty"`
|
||||
UnreadOnly Optional[bool] `json:"unread_only" url:"unread_only,omitempty"`
|
||||
Auth string `json:"auth" url:"auth,omitempty"`
|
||||
}
|
||||
|
||||
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 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 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
|
||||
}
|
||||
|
||||
type BlockPersonResponse struct {
|
||||
Blocked bool `json:"blocked" url:"blocked,omitempty"`
|
||||
PersonView PersonViewSafe `json:"person_view" url:"person_view,omitempty"`
|
||||
LemmyResponse
|
||||
}
|
||||
|
||||
type BannedPersonsResponse struct {
|
||||
Banned []PersonViewSafe `json:"banned" url:"banned,omitempty"`
|
||||
LemmyResponse
|
||||
}
|
||||
|
||||
type PasswordChange struct {
|
||||
Password string `json:"password" url:"password,omitempty"`
|
||||
PasswordVerify string `json:"password_verify" url:"password_verify,omitempty"`
|
||||
Token string `json:"token" url:"token,omitempty"`
|
||||
}
|
||||
+146
@@ -0,0 +1,146 @@
|
||||
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 Optional[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 Optional[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 Optional[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 Optional[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 Optional[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 Optional[string] `json:"auth" url:"auth,omitempty"`
|
||||
}
|
||||
|
||||
type StickyPost struct {
|
||||
PostID int `json:"post_id" url:"post_id,omitempty"`
|
||||
Stickied bool `json:"stickied" url:"stickied,omitempty"`
|
||||
Auth Optional[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 Optional[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 Optional[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 Optional[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 Optional[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"`
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package types
|
||||
|
||||
type CreatePrivateMessage struct {
|
||||
Content string `json:"content" url:"content,omitempty"`
|
||||
RecipientID int `json:"recipient_id" url:"recipient_id,omitempty"`
|
||||
Auth Optional[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 Optional[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 Optional[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 Optional[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 Optional[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 Optional[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 Optional[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 Optional[string] `json:"auth" url:"auth,omitempty"`
|
||||
}
|
||||
|
||||
type ListPrivateMessageReportsResponse struct {
|
||||
PrivateMessageReports []PrivateMessageReportView `json:"private_message_reports" url:"private_message_reports,omitempty"`
|
||||
LemmyResponse
|
||||
}
|
||||
+256
@@ -0,0 +1,256 @@
|
||||
package types
|
||||
|
||||
type Search struct {
|
||||
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"`
|
||||
Limit Optional[int] `json:"limit" url:"limit,omitempty"`
|
||||
ListingType Optional[ListingType] `json:"listing_type" url:"listing_type,omitempty"`
|
||||
Page Optional[int] `json:"page" url:"page,omitempty"`
|
||||
Query string `json:"q" url:"q,omitempty"`
|
||||
Sort Optional[SortType] `json:"sort" url:"sort,omitempty"`
|
||||
Type Optional[SearchType] `json:"type_" url:"type_,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 {
|
||||
Query 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"`
|
||||
StickiedPosts []ModStickyPostView `json:"stickied_posts" url:"stickied_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"`
|
||||
OpenRegistration Optional[bool] `json:"open_registration" url:"open_registration,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"`
|
||||
RequireApplication Optional[bool] `json:"require_application" url:"require_application,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[int] `json:"actor_name_max_length" url:"actor_name_max_length,omitempty"`
|
||||
RateLimitMessage Optional[int] `json:"rate_limit_message" url:"rate_limit_message,omitempty"`
|
||||
RateLimitMessagePerSecond Optional[int] `json:"rate_limit_message_per_second" url:"rate_limit_message_per_second,omitempty"`
|
||||
RateLimitPost Optional[int] `json:"rate_limit_post" url:"rate_limit_post,omitempty"`
|
||||
RateLimitPostPerSecond Optional[int] `json:"rate_limit_post_per_second" url:"rate_limit_post_per_second,omitempty"`
|
||||
RateLimitRegister Optional[int] `json:"rate_limit_register" url:"rate_limit_register,omitempty"`
|
||||
RateLimitRegisterPerSecond Optional[int] `json:"rate_limit_register_per_second" url:"rate_limit_register_per_second,omitempty"`
|
||||
RateLimitImage Optional[int] `json:"rate_limit_image" url:"rate_limit_image,omitempty"`
|
||||
RateLimitImagePerSecond Optional[int] `json:"rate_limit_image_per_second" url:"rate_limit_image_per_second,omitempty"`
|
||||
RateLimitComment Optional[int] `json:"rate_limit_comment" url:"rate_limit_comment,omitempty"`
|
||||
RateLimitCommentPerSecond Optional[int] `json:"rate_limit_comment_per_second" url:"rate_limit_comment_per_second,omitempty"`
|
||||
RateLimitSearch Optional[int] `json:"rate_limit_search" url:"rate_limit_search,omitempty"`
|
||||
RateLimitSearchPerSecond Optional[int] `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[int] `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"`
|
||||
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"`
|
||||
OpenRegistration Optional[bool] `json:"open_registration" url:"open_registration,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"`
|
||||
RequireApplication Optional[bool] `json:"require_application" url:"require_application,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[int] `json:"actor_name_max_length" url:"actor_name_max_length,omitempty"`
|
||||
RateLimitMessage Optional[int] `json:"rate_limit_message" url:"rate_limit_message,omitempty"`
|
||||
RateLimitMessagePerSecond Optional[int] `json:"rate_limit_message_per_second" url:"rate_limit_message_per_second,omitempty"`
|
||||
RateLimitPost Optional[int] `json:"rate_limit_post" url:"rate_limit_post,omitempty"`
|
||||
RateLimitPostPerSecond Optional[int] `json:"rate_limit_post_per_second" url:"rate_limit_post_per_second,omitempty"`
|
||||
RateLimitRegister Optional[int] `json:"rate_limit_register" url:"rate_limit_register,omitempty"`
|
||||
RateLimitRegisterPerSecond Optional[int] `json:"rate_limit_register_per_second" url:"rate_limit_register_per_second,omitempty"`
|
||||
RateLimitImage Optional[int] `json:"rate_limit_image" url:"rate_limit_image,omitempty"`
|
||||
RateLimitImagePerSecond Optional[int] `json:"rate_limit_image_per_second" url:"rate_limit_image_per_second,omitempty"`
|
||||
RateLimitComment Optional[int] `json:"rate_limit_comment" url:"rate_limit_comment,omitempty"`
|
||||
RateLimitCommentPerSecond Optional[int] `json:"rate_limit_comment_per_second" url:"rate_limit_comment_per_second,omitempty"`
|
||||
RateLimitSearch Optional[int] `json:"rate_limit_search" url:"rate_limit_search,omitempty"`
|
||||
RateLimitSearchPerSecond Optional[int] `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[int] `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"`
|
||||
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 int `json:"online" url:"online,omitempty"`
|
||||
Version string `json:"version" url:"version,omitempty"`
|
||||
MyUser Optional[MyUserInfo] `json:"my_user" url:"my_user,omitempty"`
|
||||
FederatedInstances Optional[FederatedInstances] `json:"federated_instances" url:"federated_instances,omitempty"`
|
||||
AllLanguages []Language `json:"all_languages" url:"all_languages,omitempty"`
|
||||
DiscussionLanguages []int `json:"discussion_languages" url:"discussion_languages,omitempty"`
|
||||
Taglines Optional[[]Tagline] `json:"taglines" url:"taglines,omitempty"`
|
||||
LemmyResponse
|
||||
}
|
||||
|
||||
type MyUserInfo struct {
|
||||
LocalUserView LocalUserSettingsView `json:"local_user_view" url:"local_user_view,omitempty"`
|
||||
Follows []CommunityFollowerView `json:"follows" url:"follows,omitempty"`
|
||||
Moderates []CommunityModeratorView `json:"moderates" url:"moderates,omitempty"`
|
||||
CommunityBlocks []CommunityBlockView `json:"community_blocks" url:"community_blocks,omitempty"`
|
||||
PersonBlocks []PersonBlockView `json:"person_blocks" url:"person_blocks,omitempty"`
|
||||
DiscussionLanguages []Language `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[int] `json:"page" url:"page,omitempty"`
|
||||
Limit Optional[int] `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 int `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 int `json:"registration_applications" url:"registration_applications,omitempty"`
|
||||
LemmyResponse
|
||||
}
|
||||
+402
@@ -0,0 +1,402 @@
|
||||
package types
|
||||
|
||||
import "time"
|
||||
|
||||
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 int `json:"default_sort_type" url:"default_sort_type,omitempty"`
|
||||
DefaultListingType int `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"`
|
||||
SendNotifications bool `json:"send_notifications_to_email" url:"send_notifications_to_email,omitempty"`
|
||||
ValidatorTime string `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 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 string `json:"published" url:"published,omitempty"`
|
||||
Updated Optional[string] `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 Optional[string] `json:"ban_expires" url:"ban_expires,omitempty"`
|
||||
InstanceID int `json:"instance_id" url:"instance_id,omitempty"`
|
||||
}
|
||||
|
||||
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 string `json:"published" url:"published,omitempty"`
|
||||
Updated Optional[string] `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 string `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 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"`
|
||||
OpenRegistration bool `json:"open_registration" url:"open_registration,omitempty"`
|
||||
EnableNSFW bool `json:"enable_nsfw" url:"enable_nsfw,omitempty"`
|
||||
AdminOnlyCommunityCreation bool `json:"community_creation_admin_only" url:"community_creation_admin_only,omitempty"`
|
||||
RequireEmailVerification bool `json:"require_email_verification" url:"require_email_verification,omitempty"`
|
||||
RequireApplication bool `json:"require_application" url:"require_application,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 int `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"`
|
||||
FederationStrictAllowlist bool `json:"federation_strict_allowlist" url:"federation_strict_allowlist,omitempty"`
|
||||
FederationRetryLimit int `json:"federation_http_fetch_retry_limit" url:"federation_http_fetch_retry_limit,omitempty"`
|
||||
FederationWorkerCount int `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"`
|
||||
Published string `json:"published" url:"published,omitempty"`
|
||||
Updated Optional[string] `json:"updated" url:"updated,omitempty"`
|
||||
}
|
||||
|
||||
type LocalSiteRateLimit struct {
|
||||
ID int `json:"id" url:"id,omitempty"`
|
||||
LocalSiteID int `json:"local_site_id" url:"local_site_id,omitempty"`
|
||||
Message int `json:"message" url:"message,omitempty"`
|
||||
MessagePerSecond int `json:"message_per_second" url:"message_per_second,omitempty"`
|
||||
Post int `json:"post" url:"post,omitempty"`
|
||||
PostPerSecond int `json:"post_per_second" url:"post_per_second,omitempty"`
|
||||
Register int `json:"register" url:"register,omitempty"`
|
||||
RegisterPerSecond int `json:"register_per_second" url:"register_per_second,omitempty"`
|
||||
Image int `json:"image" url:"image,omitempty"`
|
||||
ImagePerSecond int `json:"image_per_second" url:"image_per_second,omitempty"`
|
||||
Comment int `json:"comment" url:"comment,omitempty"`
|
||||
CommentPerSecond int `json:"comment_per_second" url:"comment_per_second,omitempty"`
|
||||
Search int `json:"search" url:"search,omitempty"`
|
||||
SearchPerSecond int `json:"search_per_second" url:"search_per_second,omitempty"`
|
||||
Published string `json:"published" url:"published,omitempty"`
|
||||
Updated Optional[string] `json:"updated" url:"updated,omitempty"`
|
||||
}
|
||||
|
||||
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 string `json:"published" url:"published,omitempty"`
|
||||
Updated Optional[string] `json:"updated" url:"updated,omitempty"`
|
||||
ApID string `json:"ap_id" url:"ap_id,omitempty"`
|
||||
Local bool `json:"local" url:"local,omitempty"`
|
||||
}
|
||||
|
||||
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 string `json:"published" url:"published,omitempty"`
|
||||
Updated Optional[string] `json:"updated" url:"updated,omitempty"`
|
||||
}
|
||||
|
||||
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 string `json:"published" url:"published,omitempty"`
|
||||
Updated Optional[string] `json:"updated" url:"updated,omitempty"`
|
||||
Deleted bool `json:"deleted" url:"deleted,omitempty"`
|
||||
NSFW bool `json:"nsfw" url:"nsfw,omitempty"`
|
||||
Stickied bool `json:"stickied" url:"stickied,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"`
|
||||
}
|
||||
|
||||
type PasswordResetRequest struct {
|
||||
ID int `json:"id" url:"id,omitempty"`
|
||||
LocalUserID int `json:"local_user_id" url:"local_user_id,omitempty"`
|
||||
TokenEncrypted string `json:"token_encrypted" url:"token_encrypted,omitempty"`
|
||||
Published string `json:"published" url:"published,omitempty"`
|
||||
}
|
||||
|
||||
type ModRemovePost struct {
|
||||
ID int `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 string `json:"when_" url:"when_,omitempty"`
|
||||
}
|
||||
|
||||
type ModLockPost struct {
|
||||
ID int `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 string `json:"when_" url:"when_,omitempty"`
|
||||
}
|
||||
|
||||
// ModStickyPost represents a post stickied by a moderator.
|
||||
type ModStickyPost struct {
|
||||
ID int `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"`
|
||||
Stickied Optional[bool] `json:"stickied" url:"stickied,omitempty"`
|
||||
When string `json:"when_" url:"when_,omitempty"`
|
||||
}
|
||||
|
||||
// ModRemoveComment represents a comment removal by a moderator.
|
||||
type ModRemoveComment struct {
|
||||
ID int `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 string `json:"when_" url:"when_,omitempty"`
|
||||
}
|
||||
|
||||
// ModRemoveCommunity represents a community removal by a moderator.
|
||||
type ModRemoveCommunity struct {
|
||||
ID int `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 Optional[string] `json:"expires" url:"expires,omitempty"`
|
||||
When string `json:"when_" url:"when_,omitempty"`
|
||||
}
|
||||
|
||||
// ModBanFromCommunity represents a user being banned from a community by a moderator.
|
||||
type ModBanFromCommunity struct {
|
||||
ID int `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 Optional[string] `json:"expires" url:"expires,omitempty"`
|
||||
When string `json:"when_" url:"when_,omitempty"`
|
||||
}
|
||||
|
||||
// ModBan represents a user being banned by a moderator.
|
||||
type ModBan struct {
|
||||
ID int `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 Optional[string] `json:"expires" url:"expires,omitempty"`
|
||||
When string `json:"when_" url:"when_,omitempty"`
|
||||
}
|
||||
|
||||
// ModAddCommunity represents a user being added as a moderator of a community.
|
||||
type ModAddCommunity struct {
|
||||
ID int `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 string `json:"when_" url:"when_,omitempty"`
|
||||
}
|
||||
|
||||
// ModTransferCommunity represents a community being transferred to another moderator.
|
||||
type ModTransferCommunity struct {
|
||||
ID int `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 string `json:"when_" url:"when_,omitempty"`
|
||||
}
|
||||
|
||||
// ModAdd represents a user being added as a moderator.
|
||||
type ModAdd struct {
|
||||
ID int `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 string `json:"when_" url:"when_,omitempty"`
|
||||
}
|
||||
|
||||
type AdminPurgePerson struct {
|
||||
ID int `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 string `json:"when_" url:"when_,omitempty"`
|
||||
}
|
||||
|
||||
type AdminPurgeCommunity struct {
|
||||
ID int `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 string `json:"when_" url:"when_,omitempty"`
|
||||
}
|
||||
|
||||
type AdminPurgePost struct {
|
||||
ID int `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 string `json:"when_" url:"when_,omitempty"`
|
||||
}
|
||||
|
||||
type AdminPurgeComment struct {
|
||||
ID int `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 string `json:"when_" url:"when_,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 string `json:"published" url:"published,omitempty"`
|
||||
Updated Optional[string] `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 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 string `json:"published" url:"published,omitempty"`
|
||||
Updated Optional[string] `json:"updated" url:"updated,omitempty"`
|
||||
}
|
||||
|
||||
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 string `json:"published" url:"published,omitempty"`
|
||||
Updated Optional[string] `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 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 string `json:"published" url:"published,omitempty"`
|
||||
}
|
||||
|
||||
type Language struct {
|
||||
ID int `json:"id" url:"id,omitempty"`
|
||||
Code string `json:"code" url:"code,omitempty"`
|
||||
Name string `json:"name" url:"name,omitempty"`
|
||||
}
|
||||
|
||||
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 string `json:"published" url:"published,omitempty"`
|
||||
Updated Optional[string] `json:"updated" url:"updated,omitempty"`
|
||||
}
|
||||
|
||||
type RegistrationApplication struct {
|
||||
ID int `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 string `json:"published" url:"published,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 ModHideCommunity struct {
|
||||
ID int `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 time.Time `json:"when_" url:"when_,omitempty"`
|
||||
}
|
||||
|
||||
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 string `json:"published" url:"published,omitempty"`
|
||||
}
|
||||
-1596
File diff suppressed because it is too large
Load Diff
+1
-35
@@ -4,13 +4,8 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
type EmptyResponse struct {
|
||||
LemmyResponse
|
||||
}
|
||||
|
||||
type LemmyResponse struct {
|
||||
Error Optional[string] `json:"error" url:"error,omitempty"`
|
||||
}
|
||||
@@ -32,36 +27,7 @@ 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) MarshalJSON() ([]byte, error) {
|
||||
return json.Marshal(lt.Time.Format("2006-01-02T15:04:05"))
|
||||
}
|
||||
|
||||
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"`
|
||||
Op UserOperation `json:"op"`
|
||||
Data json.RawMessage `json:"data"`
|
||||
}
|
||||
|
||||
+254
@@ -0,0 +1,254 @@
|
||||
package types
|
||||
|
||||
type PersonViewSafe struct {
|
||||
Person PersonSafe `json:"person" url:"person,omitempty"`
|
||||
Counts PersonAggregates `json:"counts" url:"counts,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"`
|
||||
CommunitySafe CommunitySafe `json:"community_safe" url:"community_safe,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 bool `json:"subscribed" url:"subscribed,omitempty"`
|
||||
Saved bool `json:"saved" url:"saved,omitempty"`
|
||||
CreatorBlocked bool `json:"creator_blocked" url:"creator_blocked,omitempty"`
|
||||
MyVote Optional[int] `json:"my_vote" url:"my_vote,omitempty"`
|
||||
}
|
||||
|
||||
type LocalUserSettingsView struct {
|
||||
LocalUserSettings LocalUserSettings `json:"local_user_settings" url:"local_user_settings,omitempty"`
|
||||
Person PersonSafe `json:"person" url:"person,omitempty"`
|
||||
Counts PersonAggregates `json:"counts" url:"counts,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"`
|
||||
Taglines Optional[[]Tagline] `json:"taglines" url:"taglines,omitempty"`
|
||||
Counts SiteAggregates `json:"counts" url:"counts,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 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 bool `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[int] `json:"my_vote" url:"my_vote,omitempty"`
|
||||
UnreadComments int `json:"unread_comments" url:"unread_comments,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[int] `json:"my_vote" url:"my_vote,omitempty"`
|
||||
Counts PostAggregates `json:"counts" url:"counts,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 bool `json:"subscribed" url:"subscribed,omitempty"`
|
||||
Saved bool `json:"saved" url:"saved,omitempty"`
|
||||
CreatorBlocked bool `json:"creator_blocked" url:"creator_blocked,omitempty"`
|
||||
MyVote Optional[int] `json:"my_vote" url:"my_vote,omitempty"`
|
||||
}
|
||||
|
||||
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"`
|
||||
CommunitySafe CommunitySafe `json:"community_safe" url:"community_safe,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[int] `json:"my_vote" url:"my_vote,omitempty"`
|
||||
Resolver Optional[PersonSafe] `json:"resolver" url:"resolver,omitempty"`
|
||||
}
|
||||
|
||||
type ModAddCommunityView struct {
|
||||
ModAddCommunity ModAddCommunity `json:"mod_add_community" url:"mod_add_community,omitempty"`
|
||||
Moderator Optional[PersonSafe] `json:"moderator" url:"moderator,omitempty"`
|
||||
CommunitySafe CommunitySafe `json:"community_safe" url:"community_safe,omitempty"`
|
||||
ModdedPerson PersonSafe `json:"modded_person" url:"modded_person,omitempty"`
|
||||
}
|
||||
|
||||
type ModTransferCommunityView struct {
|
||||
ModTransferCommunity ModTransferCommunity `json:"mod_transfer_community" url:"mod_transfer_community,omitempty"`
|
||||
Moderator Optional[PersonSafe] `json:"moderator" url:"moderator,omitempty"`
|
||||
CommunitySafe CommunitySafe `json:"community_safe" url:"community_safe,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"`
|
||||
CommunitySafe CommunitySafe `json:"community_safe" url:"community_safe,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 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"`
|
||||
CommunitySafe CommunitySafe `json:"community_safe" url:"community_safe,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"`
|
||||
CommunitySafe CommunitySafe `json:"community_safe" url:"community_safe,omitempty"`
|
||||
}
|
||||
|
||||
type ModRemoveCommunityView struct {
|
||||
ModRemoveCommunity ModRemoveCommunity `json:"mod_remove_community" url:"mod_remove_community,omitempty"`
|
||||
Moderator Optional[PersonSafe] `json:"moderator" url:"moderator,omitempty"`
|
||||
CommunitySafe CommunitySafe `json:"community_safe" url:"community_safe,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"`
|
||||
CommunitySafe CommunitySafe `json:"community_safe" url:"community_safe,omitempty"`
|
||||
}
|
||||
|
||||
type ModStickyPostView struct {
|
||||
ModStickyPost ModStickyPost `json:"mod_sticky_post" url:"mod_sticky_post,omitempty"`
|
||||
Moderator Optional[PersonSafe] `json:"moderator" url:"moderator,omitempty"`
|
||||
Post Post `json:"post" url:"post,omitempty"`
|
||||
CommunitySafe CommunitySafe `json:"community_safe" url:"community_safe,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"`
|
||||
CommunitySafe CommunitySafe `json:"community_safe" url:"community_safe,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 CommunityFollowerView struct {
|
||||
CommunitySafe CommunitySafe `json:"community_safe" url:"community_safe,omitempty"`
|
||||
Follower PersonSafe `json:"follower" url:"follower,omitempty"`
|
||||
}
|
||||
|
||||
type CommunityBlockView struct {
|
||||
PersonSafe PersonSafe `json:"person_safe" url:"person_safe,omitempty"`
|
||||
CommunitySafe CommunitySafe `json:"community_safe" url:"community_safe,omitempty"`
|
||||
}
|
||||
|
||||
type CommunityModeratorView struct {
|
||||
CommunitySafe CommunitySafe `json:"community_safe" url:"community_safe,omitempty"`
|
||||
Moderator PersonSafe `json:"moderator" url:"moderator,omitempty"`
|
||||
}
|
||||
|
||||
type CommunityPersonBanView struct {
|
||||
CommunitySafe CommunitySafe `json:"community_safe" url:"community_safe,omitempty"`
|
||||
Person PersonSafe `json:"person" url:"person,omitempty"`
|
||||
}
|
||||
|
||||
type PersonBlockView struct {
|
||||
PersonSafe PersonSafe `json:"person_safe" url:"person_safe,omitempty"`
|
||||
Target PersonSafe `json:"target" url:"target,omitempty"`
|
||||
}
|
||||
|
||||
type CommunityView struct {
|
||||
CommunitySafe CommunitySafe `json:"community_safe" url:"community_safe,omitempty"`
|
||||
Subscribed bool `json:"subscribed" url:"subscribed,omitempty"`
|
||||
Blocked bool `json:"blocked" url:"blocked,omitempty"`
|
||||
Counts CommunityAggregates `json:"counts" url:"counts,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 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 Tagline struct {
|
||||
ID int `json:"id" url:"id,omitempty"`
|
||||
LocalSiteID int `json:"local_site_id" url:"local_site_id,omitempty"`
|
||||
Content string `json:"content" url:"content,omitempty"`
|
||||
Published string `json:"published" url:"published,omitempty"`
|
||||
Updated Optional[string] `json:"updated" url:"updated,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 bool `json:"subscribed" url:"subscribed,omitempty"`
|
||||
Saved bool `json:"saved" url:"saved,omitempty"`
|
||||
CreatorBlocked bool `json:"creator_blocked" url:"creator_blocked,omitempty"`
|
||||
MyVote Optional[int] `json:"my_vote" url:"my_vote,omitempty"`
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package types
|
||||
|
||||
type UserJoin struct {
|
||||
Auth string `json:"auth"`
|
||||
}
|
||||
|
||||
type UserJoinResponse struct {
|
||||
Joined bool `json:"joined"`
|
||||
LemmyResponse
|
||||
}
|
||||
|
||||
type CommunityJoin struct {
|
||||
CommunityID int `json:"community_id"`
|
||||
}
|
||||
|
||||
type CommunityJoinResponse struct {
|
||||
Joined bool `json:"joined"`
|
||||
LemmyResponse
|
||||
}
|
||||
|
||||
type ModJoin struct {
|
||||
CommunityID int `json:"community_id"`
|
||||
}
|
||||
|
||||
type ModJoinResponse struct {
|
||||
Joined bool `json:"joined"`
|
||||
LemmyResponse
|
||||
}
|
||||
|
||||
type PostJoin struct {
|
||||
PostID int `json:"post_id"`
|
||||
}
|
||||
|
||||
type PostJoinResponse struct {
|
||||
Joined bool `json:"joined"`
|
||||
LemmyResponse
|
||||
}
|
||||
+132
@@ -0,0 +1,132 @@
|
||||
package lemmy
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"reflect"
|
||||
"time"
|
||||
|
||||
"github.com/recws-org/recws"
|
||||
"go.arsenm.dev/go-lemmy/types"
|
||||
)
|
||||
|
||||
type authData struct {
|
||||
Auth string `json:"auth"`
|
||||
}
|
||||
|
||||
type WSClient struct {
|
||||
conn *recws.RecConn
|
||||
baseURL *url.URL
|
||||
respCh chan types.LemmyWebSocketMsg
|
||||
errCh chan error
|
||||
token string
|
||||
}
|
||||
|
||||
func NewWebSocket(baseURL string) (*WSClient, error) {
|
||||
ws := &recws.RecConn{
|
||||
KeepAliveTimeout: 10 * time.Second,
|
||||
}
|
||||
|
||||
u, err := url.Parse(baseURL)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
u = u.JoinPath("/api/v3")
|
||||
|
||||
ws.Dial(u.JoinPath("ws").String(), nil)
|
||||
|
||||
out := &WSClient{
|
||||
conn: ws,
|
||||
baseURL: u,
|
||||
respCh: make(chan types.LemmyWebSocketMsg, 10),
|
||||
errCh: make(chan error, 10),
|
||||
}
|
||||
|
||||
go func() {
|
||||
for {
|
||||
var msg types.LemmyWebSocketMsg
|
||||
err = ws.ReadJSON(&msg)
|
||||
if err != nil {
|
||||
out.errCh <- err
|
||||
continue
|
||||
}
|
||||
out.respCh <- msg
|
||||
}
|
||||
}()
|
||||
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *WSClient) Login(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.Login(ctx, l)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.token = hc.token
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *WSClient) Request(op types.UserOperation, 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,
|
||||
Data: d,
|
||||
})
|
||||
}
|
||||
|
||||
func (c *WSClient) Responses() <-chan types.LemmyWebSocketMsg {
|
||||
return c.respCh
|
||||
}
|
||||
|
||||
func (c *WSClient) Errors() <-chan error {
|
||||
return c.errCh
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user