mirror of
https://github.com/versia-pub/versia-go.git
synced 2025-12-06 06:28:18 +01:00
67 lines
1.2 KiB
Go
67 lines
1.2 KiB
Go
package versia
|
|
|
|
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 "Note":
|
|
m := Note{}
|
|
if err := json.Unmarshal(raw, &m); err != nil {
|
|
return nil, err
|
|
}
|
|
return m, nil
|
|
case "Group":
|
|
m := Group{}
|
|
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 "Unfollow":
|
|
m := Unfollow{}
|
|
if err := json.Unmarshal(raw, &m); err != nil {
|
|
return nil, err
|
|
}
|
|
return m, nil
|
|
default:
|
|
return nil, UnknownEntityTypeError{Type: i.Type}
|
|
}
|
|
}
|
|
|
|
type UnknownEntityTypeError struct {
|
|
Type string
|
|
}
|
|
|
|
func (e UnknownEntityTypeError) Error() string {
|
|
return fmt.Sprintf("unknown entity type: %s", e.Type)
|
|
}
|