98 lines
2.1 KiB
Go
98 lines
2.1 KiB
Go
package goap
|
|
|
|
import "slices"
|
|
|
|
var allInternalParsersExceptBase []UnmarshalFunc = []UnmarshalFunc{
|
|
ParseASActorData,
|
|
ParseASAlsoKnownAsData,
|
|
ParseASAttachmentsData,
|
|
ParseASAttributedToData,
|
|
ParseASCCData,
|
|
ParseASContentData,
|
|
ParseASEndpointsData,
|
|
ParseASFollowersData,
|
|
ParseASFollowingData,
|
|
ParseASHrefData,
|
|
ParseASIconData,
|
|
ParseASImageData,
|
|
ParseASMediaTypeData,
|
|
ParseASNameData,
|
|
ParseASOutboxData,
|
|
ParseASObjectData,
|
|
ParseASPreferredNameData,
|
|
ParseASPublishedData,
|
|
ParseASRestrictedData,
|
|
ParseASRepliesData,
|
|
ParseASSharedInboxData,
|
|
ParseASSummaryData,
|
|
ParseASSensitiveData,
|
|
ParseASTagData,
|
|
ParseASToData,
|
|
ParseASUrlData,
|
|
ParseASUpdatedData,
|
|
|
|
ParseOstatusAtomUriData,
|
|
ParseOstatusConversationData,
|
|
|
|
ParseW3InboxData,
|
|
|
|
ParseW3VcardAddressData,
|
|
ParseW3VcardBirthdayData,
|
|
|
|
ParseW3SecurityOwnerData,
|
|
ParseW3SecurityPublicKeyPemData,
|
|
ParseW3SecurityPublicKeyData,
|
|
|
|
ParseMastoDevicesData,
|
|
ParseMastoDiscoverableData,
|
|
ParseMastoFeaturedData,
|
|
ParseMastoDiscoverableData,
|
|
ParseMastoIndexableData,
|
|
ParseMastoMemorialData,
|
|
|
|
ParseSchemaValueData,
|
|
|
|
ParseMKIsCatData,
|
|
ParseMKSummaryData,
|
|
|
|
ParseFFSpeakAsCatData,
|
|
}
|
|
|
|
func chainParse(
|
|
raw map[string]any,
|
|
start BaseApChain,
|
|
parsers ...UnmarshalFunc,
|
|
) (BaseApChain, []error) {
|
|
var current BaseApChain = start
|
|
errors := []error{}
|
|
|
|
for _, p := range parsers {
|
|
next, err := p(raw, current)
|
|
current = next
|
|
errors = append(errors, err)
|
|
}
|
|
|
|
return current, errors
|
|
}
|
|
|
|
func ParseEmptyBase(raw map[string]any, extraParsers ...UnmarshalFunc) (BaseApChain, []error) {
|
|
base := EmptyBaseObject{}
|
|
|
|
allParsers := slices.Clone(allInternalParsersExceptBase)
|
|
allParsers = append(allParsers, extraParsers...)
|
|
return chainParse(raw, &base, allParsers...)
|
|
}
|
|
|
|
func ParseDefaultBase(raw map[string]any, extraParsers ...UnmarshalFunc) (BaseApChain, []error) {
|
|
base, err := UnmarshalBaseObject(raw, nil)
|
|
if err != nil {
|
|
return base, []error{err}
|
|
}
|
|
allParsers := slices.Concat(allInternalParsersExceptBase, extraParsers)
|
|
res, errs := chainParse(raw, base, allParsers...)
|
|
return res, slices.Insert(errs, 0, err)
|
|
}
|
|
|
|
func MarshalChain(chain BaseApChain) map[string]any {
|
|
return chain.MarshalToMap()
|
|
}
|