170 lines
5.7 KiB
Go
170 lines
5.7 KiB
Go
package mastodon
|
|
|
|
import (
|
|
"time"
|
|
|
|
"git.mstar.dev/mstar/goap"
|
|
)
|
|
|
|
type Person struct {
|
|
Id string
|
|
Devices string
|
|
Discoverable bool
|
|
Featured string
|
|
FeaturedTags string
|
|
Indexable bool
|
|
Memorial bool
|
|
Inbox string
|
|
PublicKey goap.PublicKey
|
|
AlsoKnownAs string
|
|
Attachments []goap.Attachment
|
|
Endpoints map[string]string
|
|
Followers string
|
|
Following string
|
|
Icon goap.Media
|
|
Image goap.Media
|
|
ApprovesFollowers bool
|
|
Name string
|
|
Outbox string
|
|
PreferredUsername string
|
|
Published time.Time
|
|
Summary string
|
|
Tags []goap.Tag
|
|
Url string
|
|
}
|
|
|
|
func PersonFromChain(base goap.BaseApChain) (*Person, error) {
|
|
id, ok := goap.FindAttribute[*goap.UDIdData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_ID}
|
|
}
|
|
devices, ok := goap.FindAttribute[*goap.MastoDevicesData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_MASTO_DEVICES}
|
|
}
|
|
discoverable, ok := goap.FindAttribute[*goap.MastoDiscoverableData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_MASTO_DISCOVERABLE}
|
|
}
|
|
|
|
featured, ok := goap.FindAttribute[*goap.MastoFeaturedData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_MASTO_FEATURED}
|
|
}
|
|
featuredTags, ok := goap.FindAttribute[*goap.MastoFeaturedTagsData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_MASTO_FEATURED_TAGS}
|
|
}
|
|
Indexable, ok := goap.FindAttribute[*goap.MastoIndexableData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_MASTO_INDEXABLE}
|
|
}
|
|
memorial, ok := goap.FindAttribute[*goap.MastoMemorialData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_MASTO_MEMORIAL}
|
|
}
|
|
inbox, ok := goap.FindAttribute[*goap.W3InboxData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_W3_INBOX}
|
|
}
|
|
publicKey, ok := goap.FindAttribute[*goap.W3SecurityPublicKeyData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_W3_SECURITY_PUBLICKEY}
|
|
}
|
|
alsoKnownAs, ok := goap.FindAttribute[*goap.ASAlsoKnownAsData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_ACTIVITYSTREAMS_ALSOKNOWNAS}
|
|
}
|
|
attachments, ok := goap.FindAttribute[*goap.ASAttachmentsData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_ACTIVITYSTREAMS_ATTACHMENTS}
|
|
}
|
|
endpoints, ok := goap.FindAttribute[*goap.ASEndpointsData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_ACTIVITYSTREAMS_ENDPOINTS}
|
|
}
|
|
followers, ok := goap.FindAttribute[*goap.ASFollowersData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_ACTIVITYSTREAMS_FOLLOWERS}
|
|
}
|
|
following, ok := goap.FindAttribute[*goap.ASFollowingData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_ACTIVITYSTREAMS_FOLLOWING}
|
|
}
|
|
icon, ok := goap.FindAttribute[*goap.ASIconData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_ACTIVITYSTREAMS_ICON}
|
|
}
|
|
image, ok := goap.FindAttribute[*goap.ASImageData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_ACTIVITYSTREAMS_IMAGE_ATTRIBUTE}
|
|
}
|
|
approvesFollowers, ok := goap.FindAttribute[*goap.ASRestrictedFollowData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_ACTIVITYSTREAMS_RESTRICTED_FOLLOW}
|
|
}
|
|
name, ok := goap.FindAttribute[*goap.ASNameData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_ACTIVITYSTREAMS_NAME}
|
|
}
|
|
outbox, ok := goap.FindAttribute[*goap.ASOutboxData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_ACTIVITYSTREAMS_OUTBOX}
|
|
}
|
|
preferredUsername, ok := goap.FindAttribute[*goap.ASPreferredNameData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_ACTIVITYSTREAMS_PREFFEREDUSERNAME}
|
|
}
|
|
published, ok := goap.FindAttribute[*goap.ASPublishedData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_ACTIVITYSTREAMS_PUBLISHED}
|
|
}
|
|
summary, ok := goap.FindAttribute[*goap.ASSummaryData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_ACTIVITYSTREAMS_SUMMARY}
|
|
}
|
|
tags, ok := goap.FindAttribute[*goap.ASTagData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_ACTIVITYSTREAMS_TAG}
|
|
}
|
|
url, ok := goap.FindAttribute[*goap.ASUrlData](base)
|
|
if !ok {
|
|
return nil, goap.NoRequiredFieldError{FieldName: goap.KEY_ACTIVITYSTREAMS_URL}
|
|
}
|
|
|
|
return &Person{
|
|
Id: id.Id,
|
|
Devices: devices.Id,
|
|
Discoverable: discoverable.Value.Value,
|
|
Featured: featured.Id,
|
|
FeaturedTags: featuredTags.Id,
|
|
Indexable: Indexable.Value.Value,
|
|
Memorial: memorial.Value.Value,
|
|
Inbox: inbox.Id,
|
|
PublicKey: goap.PublicKey{
|
|
Id: publicKey.Id,
|
|
Owner: publicKey.Owner,
|
|
Pem: publicKey.Key,
|
|
},
|
|
AlsoKnownAs: alsoKnownAs.Id,
|
|
Attachments: attachments.Attachments,
|
|
Endpoints: endpoints.Endpoints,
|
|
Followers: followers.Id,
|
|
Following: following.Id,
|
|
Icon: icon.Media,
|
|
Image: image.Media,
|
|
ApprovesFollowers: approvesFollowers.Value.Value,
|
|
Name: name.Value.Value,
|
|
Outbox: outbox.Id,
|
|
PreferredUsername: preferredUsername.Value.Value,
|
|
Published: published.Timestamp,
|
|
Summary: summary.Value.Value,
|
|
Tags: tags.Tags,
|
|
Url: url.Id,
|
|
}, nil
|
|
}
|
|
|
|
func (p *Person) ToChain() goap.BaseApChain {
|
|
var x goap.BaseApChain = &goap.EmptyBaseObject{}
|
|
panic("not implemented") // TODO: Implement me
|
|
}
|