mirror of
https://github.com/versia-pub/versia-go.git
synced 2025-12-06 22:38:20 +01:00
73 lines
1.3 KiB
Go
73 lines
1.3 KiB
Go
|
|
package lysand
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"fmt"
|
||
|
|
)
|
||
|
|
|
||
|
|
type inboxObject struct {
|
||
|
|
Type string `json:"type"`
|
||
|
|
}
|
||
|
|
|
||
|
|
func ParseInboxObject(raw json.RawMessage) (any, error) {
|
||
|
|
var i inboxObject
|
||
|
|
if err := json.Unmarshal(raw, &i); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
switch i.Type {
|
||
|
|
case "Publication":
|
||
|
|
m := Publication{}
|
||
|
|
if err := json.Unmarshal(raw, &m); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return m, nil
|
||
|
|
case "Note":
|
||
|
|
m := Note{}
|
||
|
|
if err := json.Unmarshal(raw, &m); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return m, nil
|
||
|
|
case "Patch":
|
||
|
|
m := Patch{}
|
||
|
|
if err := json.Unmarshal(raw, &m); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return m, nil
|
||
|
|
case "Follow":
|
||
|
|
m := Follow{}
|
||
|
|
if err := json.Unmarshal(raw, &m); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return m, nil
|
||
|
|
case "FollowAccept":
|
||
|
|
m := FollowAccept{}
|
||
|
|
if err := json.Unmarshal(raw, &m); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return m, nil
|
||
|
|
case "FollowReject":
|
||
|
|
m := FollowReject{}
|
||
|
|
if err := json.Unmarshal(raw, &m); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return m, nil
|
||
|
|
case "Undo":
|
||
|
|
m := Undo{}
|
||
|
|
if err := json.Unmarshal(raw, &m); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return m, nil
|
||
|
|
default:
|
||
|
|
return nil, ErrUnknownType{Type: i.Type}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
type ErrUnknownType struct {
|
||
|
|
Type string
|
||
|
|
}
|
||
|
|
|
||
|
|
func (e ErrUnknownType) Error() string {
|
||
|
|
return fmt.Sprintf("unknown inbox object type: %s", e.Type)
|
||
|
|
}
|