Changes
6 changed files (+244/-131)
-
-
@@ -4,7 +4,6 @@ import ("bytes" "encoding/gob" "errors" "fmt" "reflect" "strings" "time"
-
@@ -843,8 +842,15 @@ func (a Activity) GobEncode() ([]byte, error) {} // GobDecode func (a *Activity) GobDecode([]byte) error { return errors.New(fmt.Sprintf("GobDecode is not implemented for %T", *a)) func (a *Activity) GobDecode(data []byte) error { if len(data) == 0 { return nil } mm, err := gobDecodeObjectAsMap(data) if err != nil { return err } return unmapActivityProperties(mm, a) } // Equals verifies if our receiver Object is equals with the "with" Object
-
-
-
@@ -4,7 +4,6 @@ import ("bytes" "encoding/gob" "encoding/json" "errors" "fmt" "reflect" "time"
-
@@ -243,74 +242,6 @@ func (a Actor) MarshalBinary() ([]byte, error) {return a.GobEncode() } func mapActorProperties(mm map[string][]byte, a *Actor) (hasData bool, err error) { err = OnObject(a, func(o *Object) error { hasData, err = mapObjectProperties(mm, o) return err }) if a.Inbox != nil { if mm["inbox"], err = gobEncodeItem(a.Inbox); err != nil { return hasData, err } hasData = true } if a.Inbox != nil { if mm["inbox"], err = gobEncodeItem(a.Inbox); err != nil { return hasData, err } hasData = true } if a.Outbox != nil { if mm["outbox"], err = gobEncodeItem(a.Outbox); err != nil { return hasData, err } hasData = true } if a.Following != nil { if mm["following"], err = gobEncodeItem(a.Following); err != nil { return hasData, err } hasData = true } if a.Followers != nil { if mm["followers"], err = gobEncodeItem(a.Followers); err != nil { return hasData, err } hasData = true } if a.Liked != nil { if mm["liked"], err = gobEncodeItem(a.Liked); err != nil { return hasData, err } hasData = true } if len(a.PreferredUsername) > 0 { if mm["preferredUsername"], err = a.PreferredUsername.GobEncode(); err != nil { return hasData, err } hasData = true } if a.Endpoints != nil { if mm["endpoints"], err = a.Endpoints.GobEncode(); err != nil { return hasData, err } hasData = true } if len(a.Streams) > 0 { //if mm["streams"], err = gobDecodeItem(a.Streams); err != nil { // return hasData, err //} //hasData = true } if len(a.PublicKey.PublicKeyPem)+len(a.PublicKey.ID) > 0 { if mm["publicKey"], err = a.PublicKey.GobEncode(); err != nil { return hasData, err } hasData = true } return hasData, err } func (a Actor) GobEncode() ([]byte, error) { var mm = make(map[string][]byte) hasData, err := mapActorProperties(mm, &a)
-
@@ -328,8 +259,15 @@ func (a Actor) GobEncode() ([]byte, error) {return bb.Bytes(), nil } func (a *Actor) GobDecode([]byte) error { return errors.New(fmt.Sprintf("GobDecode is not implemented for %T", *a)) func (a *Actor) GobDecode(data []byte) error { if len(data) == 0 { return nil } mm, err := gobDecodeObjectAsMap(data) if err != nil { return err } return unmapActorProperties(mm, a) } type (
-
-
-
@@ -9,16 +9,157 @@ import () func unmapActorProperties(mm map[string][]byte, a *Actor) error { return errors.New("TODO unmapActorProperties") err := OnObject(a, func(ob *Object) error { return unmapObjectProperties(mm, ob) }) if err != nil { return err } if raw, ok := mm["inbox"]; ok { if a.Inbox, err = gobDecodeItem(raw); err != nil { return err } } if raw, ok := mm["outbox"]; ok { if a.Outbox, err = gobDecodeItem(raw); err != nil { return err } } if raw, ok := mm["following"]; ok { if a.Following, err = gobDecodeItem(raw); err != nil { return err } } if raw, ok := mm["followers"]; ok { if a.Followers, err = gobDecodeItem(raw); err != nil { return err } } if raw, ok := mm["liked"]; ok { if a.Liked, err = gobDecodeItem(raw); err != nil { return err } } if raw, ok := mm["preferredUsername"]; ok { if a.PreferredUsername, err = gobDecodeNaturalLanguageValues(raw); err != nil { return err } } if raw, ok := mm["endpoints"]; ok { if err = a.Endpoints.GobDecode(raw); err != nil { return err } } //if raw, ok := mm["streams"]; ok { // if err = a.Streams.GobDecode(raw); err != nil { // return err // } //} if raw, ok := mm["publicKey"]; ok { if err = a.PublicKey.GobDecode(raw); err != nil { return err } } return nil } func unmapIntransitiveActivityProperties(mm map[string][]byte, act *IntransitiveActivity) error { return errors.New("TODO unmapIntransitiveActivityProperties") err := OnObject(act, func(ob *Object) error { return unmapObjectProperties(mm, ob) }) if err != nil { return err } if raw, ok := mm["actor"]; ok { if act.Actor, err = gobDecodeItem(raw); err != nil { return err } } if raw, ok := mm["target"]; ok { if act.Target, err = gobDecodeItem(raw); err != nil { return err } } if raw, ok := mm["result"]; ok { if act.Result, err = gobDecodeItem(raw); err != nil { return err } } if raw, ok := mm["origin"]; ok { if act.Origin, err = gobDecodeItem(raw); err != nil { return err } } if raw, ok := mm["instrument"]; ok { if act.Instrument, err = gobDecodeItem(raw); err != nil { return err } } return nil } func unmapActivityProperties(mm map[string][]byte, act *Activity) error { return errors.New("TODO unmapActivityProperties") err := OnIntransitiveActivity(act, func(act *IntransitiveActivity) error { return unmapIntransitiveActivityProperties(mm, act) }) if err != nil { return err } if raw, ok := mm["object"]; ok { if act.Object, err = gobDecodeItem(raw); err != nil { return err } } return nil } func unmapLinkProperties(mm map[string][]byte, l *Link) error { return errors.New("TODO unmapLinkProperties") if raw, ok := mm["id"]; ok { if err := l.ID.GobDecode(raw); err != nil { return err } } if raw, ok := mm["type"]; ok { if err := l.Type.GobDecode(raw); err != nil { return err } } if raw, ok := mm["mediaType"]; ok { if err := l.MediaType.GobDecode(raw); err != nil { return err } } if raw, ok := mm["href"]; ok { if err := l.Href.GobDecode(raw); err != nil { return err } } if raw, ok := mm["hrefLang"]; ok { if err := l.HrefLang.GobDecode(raw); err != nil { return err } } if raw, ok := mm["name"]; ok { if err := l.Name.GobDecode(raw); err != nil { return err } } if raw, ok := mm["rel"]; ok { if err := l.Rel.GobDecode(raw); err != nil { return err } } if raw, ok := mm["width"]; ok { if err := gobDecodeUint(&l.Width, raw); err != nil { return err } } if raw, ok := mm["height"]; ok { if err := gobDecodeUint(&l.Height, raw); err != nil { return err } } return nil } func unmapObjectProperties(mm map[string][]byte, o *Object) error {
-
@@ -329,7 +470,7 @@ func gobDecodeItem(data []byte) (Item, error) {return it, err } return nil, errors.New("unable to decode to any known ActivityPub types") return nil, errors.New("unable to gob decode to any known ActivityPub types") } func gobDecodeObjectAsMap(data []byte) (map[string][]byte, error) {
-
-
-
@@ -336,3 +336,71 @@ func mapObjectProperties(mm map[string][]byte, o *Object) (hasData bool, err errreturn hasData, nil } func mapActorProperties(mm map[string][]byte, a *Actor) (hasData bool, err error) { err = OnObject(a, func(o *Object) error { hasData, err = mapObjectProperties(mm, o) return err }) if a.Inbox != nil { if mm["inbox"], err = gobEncodeItem(a.Inbox); err != nil { return hasData, err } hasData = true } if a.Inbox != nil { if mm["inbox"], err = gobEncodeItem(a.Inbox); err != nil { return hasData, err } hasData = true } if a.Outbox != nil { if mm["outbox"], err = gobEncodeItem(a.Outbox); err != nil { return hasData, err } hasData = true } if a.Following != nil { if mm["following"], err = gobEncodeItem(a.Following); err != nil { return hasData, err } hasData = true } if a.Followers != nil { if mm["followers"], err = gobEncodeItem(a.Followers); err != nil { return hasData, err } hasData = true } if a.Liked != nil { if mm["liked"], err = gobEncodeItem(a.Liked); err != nil { return hasData, err } hasData = true } if len(a.PreferredUsername) > 0 { if mm["preferredUsername"], err = a.PreferredUsername.GobEncode(); err != nil { return hasData, err } hasData = true } if a.Endpoints != nil { if mm["endpoints"], err = a.Endpoints.GobEncode(); err != nil { return hasData, err } hasData = true } if len(a.Streams) > 0 { //if mm["streams"], err = gobDecodeItem(a.Streams); err != nil { // return hasData, err //} //hasData = true } if len(a.PublicKey.PublicKeyPem)+len(a.PublicKey.ID) > 0 { if mm["publicKey"], err = a.PublicKey.GobEncode(); err != nil { return hasData, err } hasData = true } return hasData, err }
-
-
-
@@ -4,7 +4,6 @@ import ("bytes" "encoding/gob" "errors" "fmt" "reflect" "time" "unsafe"
-
@@ -229,8 +228,15 @@ func (i IntransitiveActivity) GobEncode() ([]byte, error) {return bb.Bytes(), nil } func (i *IntransitiveActivity) GobDecode([]byte) error { return errors.New(fmt.Sprintf("GobDecode is not implemented for %T", *i)) func (i *IntransitiveActivity) GobDecode(data []byte) error { if len(data) == 0 { return nil } mm, err := gobDecodeObjectAsMap(data) if err != nil { return err } return unmapIntransitiveActivityProperties(mm, i) } // IntransitiveActivityNew initializes a intransitive activity
-
-
-
@@ -204,55 +204,9 @@ func (l *Link) GobDecode(data []byte) error {if len(data) == 0 { return nil } mm := make(map[string][]byte) g := gob.NewDecoder(bytes.NewReader(data)) if err := g.Decode(&mm); err != nil { mm, err := gobDecodeObjectAsMap(data) if err != nil { return err } if raw, ok := mm["id"]; ok { if err := l.ID.GobDecode(raw); err != nil { return err } } if raw, ok := mm["type"]; ok { if err := l.Type.GobDecode(raw); err != nil { return err } } if raw, ok := mm["mediaType"]; ok { if err := l.MediaType.GobDecode(raw); err != nil { return err } } if raw, ok := mm["href"]; ok { if err := l.Href.GobDecode(raw); err != nil { return err } } if raw, ok := mm["hrefLang"]; ok { if err := l.HrefLang.GobDecode(raw); err != nil { return err } } if raw, ok := mm["name"]; ok { if err := l.Name.GobDecode(raw); err != nil { return err } } if raw, ok := mm["rel"]; ok { if err := l.Rel.GobDecode(raw); err != nil { return err } } if raw, ok := mm["width"]; ok { if err := gobDecodeUint(&l.Width, raw); err != nil { return err } } if raw, ok := mm["height"]; ok { if err := gobDecodeUint(&l.Height, raw); err != nil { return err } } return nil return unmapLinkProperties(mm, l) }
-