versia-go/pkg/versia/inbox.go

67 lines
1.2 KiB
Go
Raw Normal View History

2024-08-22 23:03:38 +02:00
package versia
2024-08-11 03:51:22 +02:00
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
2024-08-22 23:03:38 +02:00
case "Group":
m := Group{}
2024-08-11 03:51:22 +02:00
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
2024-08-22 23:03:38 +02:00
case "Unfollow":
m := Unfollow{}
2024-08-11 03:51:22 +02:00
if err := json.Unmarshal(raw, &m); err != nil {
return nil, err
}
return m, nil
default:
2024-08-22 23:03:38 +02:00
return nil, UnknownEntityTypeError{Type: i.Type}
2024-08-11 03:51:22 +02:00
}
}
2024-08-22 23:03:38 +02:00
type UnknownEntityTypeError struct {
2024-08-11 03:51:22 +02:00
Type string
}
2024-08-22 23:03:38 +02:00
func (e UnknownEntityTypeError) Error() string {
return fmt.Sprintf("unknown entity type: %s", e.Type)
2024-08-11 03:51:22 +02:00
}