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