goap/mastodon/account.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
}