Changes
2 changed files (+115/-0)
-
activitypub/object.go (new)
-
@@ -0,0 +1,53 @@package activitypub import ( "github.com/buger/jsonparser" as "github.com/mariusor/activitypub.go/activitystreams" ) // Source is intended to convey some sort of source from which the content markup was derived, // as a form of provenance, or to support future editing by clients. type Source struct { // Content Content as.NaturalLanguageValue `jsonld:"content"` // MediaType MediaType as.MimeType `jsonld:"mediaType"` } // Object type Object struct { as.Object // Source property is intended to convey some sort of source from which the content markup was derived, // as a form of provenance, or to support future editing by clients. // In general, clients do the conversion from source to content, not the other way around. Source Source `jsonld:"source,omitempty"` } // GetAPSource func GetAPSource(data []byte) Source { s := Source{} contBytes, _, _, err := jsonparser.Get(data, "source", "content") if err == nil { s.Content.UnmarshalJSON(contBytes) } mimeBytes, _, _, err := jsonparser.Get(data, "source", "mimeType") if err == nil { s.MediaType.UnmarshalJSON(mimeBytes) } return s } // UnmarshalJSON func (s *Source) UnmarshalJSON(data []byte) error { *s = GetAPSource(data) return nil } // UnmarshalJSON func (o *Object) UnmarshalJSON(data []byte) error { o.Object.UnmarshalJSON(data) o.Source = GetAPSource(data) return nil }
-
-
-
@@ -0,0 +1,62 @@package activitypub import "testing" func validateEmptyObject(o Object, t *testing.T) { if o.ID != "" { t.Errorf("Unmarshalled object %T should have empty ID, received %q", o, o.ID) } if o.Type != "" { t.Errorf("Unmarshalled object %T should have empty Type, received %q", o, o.Type) } if o.AttributedTo != nil { t.Errorf("Unmarshalled object %T should have empty AttributedTo, received %q", o, o.AttributedTo) } if len(o.Name) != 0 { t.Errorf("Unmarshalled object %T should have empty Name, received %q", o, o.Name) } if len(o.Summary) != 0 { t.Errorf("Unmarshalled object %T should have empty Summary, received %q", o, o.Summary) } if len(o.Content) != 0 { t.Errorf("Unmarshalled object %T should have empty Content, received %q", o, o.Content) } if o.URL != nil { t.Errorf("Unmarshalled object %T should have empty URL, received %v", o, o.URL) } if !o.Published.IsZero() { t.Errorf("Unmarshalled object %T should have empty Published, received %q", o, o.Published) } if !o.StartTime.IsZero() { t.Errorf("Unmarshalled object %T should have empty StartTime, received %q", o, o.StartTime) } if !o.Updated.IsZero() { t.Errorf("Unmarshalled object %T should have empty Updated, received %q", o, o.Updated) } validateEmptySource(o.Source, t) } func validateEmptySource(s Source, t *testing.T) { if s.MediaType != "" { t.Errorf("Unmarshalled object %T should have empty Source.MediaType, received %q", s, s.MediaType) } if s.Content != nil { t.Errorf("Unmarshalled object %T should have empty Source.Content, received %q", s, s.Content) } } func TestObject_UnmarshalJSON(t *testing.T) { o := Object{} dataEmpty := []byte("{}") o.UnmarshalJSON(dataEmpty) validateEmptyObject(o, t) } func TestSource_UnmarshalJSON(t *testing.T) { s := Source{} dataEmpty := []byte("{}") s.UnmarshalJSON(dataEmpty) validateEmptySource(s, t) }
-