versia-go/pkg/versia/inbox.go
2024-08-22 23:05:37 +02:00

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)
}