Changes
2 changed files (+45/-12)
-
-
@@ -182,7 +182,10 @@ func JSONUnmarshalToItem(data []byte) Item {items := make(ItemCollection, 0) for _, v := range val.GetArray() { var it Item it, err = itemFn(v.GetStringBytes()) // NOTE(marius): I'm sure that using v.String here slows us down and undoes any benefits that fastjson // might bring v.Object() it, err = itemFn([]byte(v.String())) if it != nil && err == nil { items.Append(it) }
-
@@ -297,25 +300,21 @@ func JSONGetItems(data []byte, prop string) ItemCollection {} p := fastjson.Parser{} v, err := p.ParseBytes(data) val, err := p.ParseBytes(data) if err != nil { return nil } v = v.Get(prop) if v == nil { val = val.Get(prop) if val == nil { return nil } it := make(ItemCollection, 0) switch v.Type() { switch val.Type() { case fastjson.TypeArray: val := v.GetArray(prop) if len(val) == 0 { return nil } for _, v := range val { if i, err := itemFn(v.GetStringBytes()); i != nil && err == nil { for _, v := range val.GetArray() { if i, err := itemFn([]byte(v.String())); i != nil && err == nil { it.Append(i) } }
-
@@ -324,7 +323,7 @@ func JSONGetItems(data []byte, prop string) ItemCollection {it.Append(i) } case fastjson.TypeString: if iri := v.GetStringBytes(); len(iri) > 0 { if iri := val.GetStringBytes(); len(iri) > 0 { it.Append(IRI(iri)) } }
-
-
-
@@ -5,6 +5,7 @@ import ("fmt" "reflect" "testing" "time" "unsafe" )
-
@@ -352,6 +353,39 @@ func TestUnmarshalJSON(t *testing.T) {want: &Activity{Type: LikeType}, err: nil, }, { name: "collection-2-items", data: []byte(`{ "@context": "https://www.w3.org/ns/activitystreams", "id": "https://federated.git/inbox", "type": "OrderedCollection", "updated": "2021-08-08T16:09:05Z", "first": "https://federated.git/inbox?maxItems=100", "totalItems": 2, "orderedItems": [ { "id": "https://federated.git/activities/07440c39-64b2-4492-89cf-f5c2872cf4ff", "type": "Create", "attributedTo": "https://federated.git/actors/b1757243-080a-49dc-b832-42905d554b91", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://federated.git/actors/b1757243-080a-49dc-b832-42905d554b91/followers" ], "published": "2021-08-08T16:09:05Z", "actor": "https://federated.git/actors/b1757243-080a-49dc-b832-42905d554b91", "object": "https://federated.git/objects/3eb69f77-3b08-4bf1-8760-c7333e2900c4" }, { "id": "https://federated.git/activities/ab9a5511-cdb5-4585-8a48-775d1bf20121", "type": "Like", "attributedTo": "https://federated.git/actors/b1757243-080a-49dc-b832-42905d554b91", "to": [ "https://www.w3.org/ns/activitystreams#Public", "https://federated.git/actors/b1757243-080a-49dc-b832-42905d554b91" ], "published": "2021-08-08T16:09:05Z", "actor": "https://federated.git/actors/b1757243-080a-49dc-b832-42905d554b91", "object": "https://federated.git/objects/3eb69f77-3b08-4bf1-8760-c7333e2900c4" }]}`), want: &OrderedCollection{ ID: "https://federated.git/inbox", Type: OrderedCollectionType, Updated: time.Date(2021, 8, 8, 16, 9, 5, 0, time.UTC), First: IRI("https://federated.git/inbox?maxItems=100"), OrderedItems: ItemCollection{ &Activity{ ID: "https://federated.git/activities/07440c39-64b2-4492-89cf-f5c2872cf4ff", Type: CreateType, AttributedTo: IRI("https://federated.git/actors/b1757243-080a-49dc-b832-42905d554b91"), To: ItemCollection{PublicNS}, CC: ItemCollection{ IRI("https://federated.git/actors/b1757243-080a-49dc-b832-42905d554b91/followers") }, Published: time.Date(2021,8,8, 16, 9, 5, 0, time.UTC), Actor: IRI("https://federated.git/actors/b1757243-080a-49dc-b832-42905d554b91"), Object: IRI("https://federated.git/objects/3eb69f77-3b08-4bf1-8760-c7333e2900c4"), }, &Activity{ ID: "https://federated.git/activities/ab9a5511-cdb5-4585-8a48-775d1bf20121", Type: LikeType, AttributedTo: IRI("https://federated.git/actors/b1757243-080a-49dc-b832-42905d554b91"), To: ItemCollection{PublicNS, IRI("https://federated.git/actors/b1757243-080a-49dc-b832-42905d554b91")}, Published: time.Date(2021,8,8, 16, 9, 5, 0, time.UTC), Actor: IRI("https://federated.git/actors/b1757243-080a-49dc-b832-42905d554b91"), Object: IRI("https://federated.git/objects/3eb69f77-3b08-4bf1-8760-c7333e2900c4"), }, }, TotalItems: 2, }, err: nil, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {
-