versia-go/pkg/lysand/inbox.go
2024-08-13 01:18:14 +02:00

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