+//!
diff --git a/acrate_astreams/src/miajetzt.rs b/acrate_astreams/src/miajetzt.rs
new file mode 100644
index 0000000..85e9cf7
--- /dev/null
+++ b/acrate_astreams/src/miajetzt.rs
@@ -0,0 +1,6 @@
+//! Struct definitions for mia's Extension Types.
+//!
+//! # Specification
+//!
+//! -
+//!
diff --git a/acrate_astreams/tests/activitystreams/examples/1.json b/acrate_astreams/tests/activitystreams/examples/1.json
new file mode 100644
index 0000000..8bd7c51
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/1.json
@@ -0,0 +1,6 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Object",
+ "id": "http://www.test.example/object/1",
+ "name": "A Simple, non-specific object"
+}
diff --git a/acrate_astreams/tests/activitystreams/examples/10.json b/acrate_astreams/tests/activitystreams/examples/10.json
new file mode 100644
index 0000000..50495a2
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/10.json
@@ -0,0 +1,17 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally accepted Joe into the club",
+ "type": "Accept",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": {
+ "type": "Person",
+ "name": "Joe"
+ },
+ "target": {
+ "type": "Group",
+ "name": "The Club"
+ }
+ }
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/100.json b/acrate_astreams/tests/activitystreams/examples/100.json
new file mode 100644
index 0000000..c776713
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/100.json
@@ -0,0 +1,11 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Page 1 of Sally's blog posts",
+ "type": "CollectionPage",
+ "prev": "http://example.org/collection?page=1",
+ "items": [
+ "http://example.org/posts/1",
+ "http://example.org/posts/2",
+ "http://example.org/posts/3"
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/101.json b/acrate_astreams/tests/activitystreams/examples/101.json
new file mode 100644
index 0000000..5b2bdf6
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/101.json
@@ -0,0 +1,16 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Page 1 of Sally's blog posts",
+ "type": "CollectionPage",
+ "prev": {
+ "type": "Link",
+ "name": "Previous Page",
+ "href": "http://example.org/collection?page=1"
+ },
+ "items": [
+ "http://example.org/posts/1",
+ "http://example.org/posts/2",
+ "http://example.org/posts/3"
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/102.json b/acrate_astreams/tests/activitystreams/examples/102.json
new file mode 100644
index 0000000..65c5abb
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/102.json
@@ -0,0 +1,16 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Video",
+ "name": "Cool New Movie",
+ "duration": "PT2H30M",
+ "preview": {
+ "type": "Video",
+ "name": "Trailer",
+ "duration": "PT1M",
+ "url": {
+ "href": "http://example.org/trailer.mkv",
+ "mediaType": "video/mkv"
+ }
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/103.json b/acrate_astreams/tests/activitystreams/examples/103.json
new file mode 100644
index 0000000..f804d63
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/103.json
@@ -0,0 +1,11 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally checked that her flight was on time",
+ "type": ["Activity", "http://www.verbs.example/Check"],
+ "actor": "http://sally.example.org",
+ "object": "http://example.org/flights/1",
+ "result": {
+ "type": "http://www.types.example/flightstatus",
+ "name": "On Time"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/104.json b/acrate_astreams/tests/activitystreams/examples/104.json
new file mode 100644
index 0000000..4dfb900
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/104.json
@@ -0,0 +1,19 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "A simple note",
+ "type": "Note",
+ "id": "http://www.test.example/notes/1",
+ "content": "I am fine.",
+ "replies": {
+ "type": "Collection",
+ "totalItems": 1,
+ "items": [
+ {
+ "summary": "A response to the note",
+ "type": "Note",
+ "content": "I am glad to hear it.",
+ "inReplyTo": "http://www.test.example/notes/1"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/105.json b/acrate_astreams/tests/activitystreams/examples/105.json
new file mode 100644
index 0000000..c8748a1
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/105.json
@@ -0,0 +1,13 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Image",
+ "summary": "Picture of Sally",
+ "url": "http://example.org/sally.jpg",
+ "tag": [
+ {
+ "type": "Person",
+ "id": "http://sally.example.org",
+ "name": "Sally"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/106.json b/acrate_astreams/tests/activitystreams/examples/106.json
new file mode 100644
index 0000000..d445bae
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/106.json
@@ -0,0 +1,9 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally offered the post to John",
+ "type": "Offer",
+ "actor": "http://sally.example.org",
+ "object": "http://example.org/posts/1",
+ "target": "http://john.example.org"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/107.json b/acrate_astreams/tests/activitystreams/examples/107.json
new file mode 100644
index 0000000..cb2eef1
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/107.json
@@ -0,0 +1,12 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally offered the post to John",
+ "type": "Offer",
+ "actor": "http://sally.example.org",
+ "object": "http://example.org/posts/1",
+ "target": {
+ "type": "Person",
+ "name": "John"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/108.json b/acrate_astreams/tests/activitystreams/examples/108.json
new file mode 100644
index 0000000..ae3efd2
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/108.json
@@ -0,0 +1,9 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally offered the post to John",
+ "type": "Offer",
+ "actor": "http://sally.example.org",
+ "object": "http://example.org/posts/1",
+ "target": "http://john.example.org",
+ "to": [ "http://joe.example.org" ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/109.json b/acrate_astreams/tests/activitystreams/examples/109.json
new file mode 100644
index 0000000..4fa874a
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/109.json
@@ -0,0 +1,6 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Document",
+ "name": "4Q Sales Forecast",
+ "url": "http://example.org/4q-sales-forecast.pdf"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/11.json b/acrate_astreams/tests/activitystreams/examples/11.json
new file mode 100644
index 0000000..247077e
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/11.json
@@ -0,0 +1,17 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally tentatively accepted an invitation to a party",
+ "type": "TentativeAccept",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": {
+ "type": "Invite",
+ "actor": "http://john.example.org",
+ "object": {
+ "type": "Event",
+ "name": "Going-Away Party for Jim"
+ }
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/110.json b/acrate_astreams/tests/activitystreams/examples/110.json
new file mode 100644
index 0000000..d1f733c
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/110.json
@@ -0,0 +1,10 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Document",
+ "name": "4Q Sales Forecast",
+ "url": {
+ "type": "Link",
+ "href": "http://example.org/4q-sales-forecast.pdf"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/111.json b/acrate_astreams/tests/activitystreams/examples/111.json
new file mode 100644
index 0000000..6035b9f
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/111.json
@@ -0,0 +1,17 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Document",
+ "name": "4Q Sales Forecast",
+ "url": [
+ {
+ "type": "Link",
+ "href": "http://example.org/4q-sales-forecast.pdf",
+ "mediaType": "application/pdf"
+ },
+ {
+ "type": "Link",
+ "href": "http://example.org/4q-sales-forecast.html",
+ "mediaType": "text/html"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/112.json b/acrate_astreams/tests/activitystreams/examples/112.json
new file mode 100644
index 0000000..b5802e0
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/112.json
@@ -0,0 +1,8 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "name": "Liu Gu Lu Cun, Pingdu, Qingdao, Shandong, China",
+ "type": "Place",
+ "latitude": 36.75,
+ "longitude": 119.7667,
+ "accuracy": 94.5
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/113.json b/acrate_astreams/tests/activitystreams/examples/113.json
new file mode 100644
index 0000000..6286de5
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/113.json
@@ -0,0 +1,9 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Place",
+ "name": "Fresno Area",
+ "altitude": 15.0,
+ "latitude": 36.75,
+ "longitude": 119.7667,
+ "units": "miles"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/114.json b/acrate_astreams/tests/activitystreams/examples/114.json
new file mode 100644
index 0000000..d25c1ac
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/114.json
@@ -0,0 +1,6 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "A simple note",
+ "type": "Note",
+ "content": "A simple note"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/115.json b/acrate_astreams/tests/activitystreams/examples/115.json
new file mode 100644
index 0000000..1d656f9
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/115.json
@@ -0,0 +1,10 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "A simple note",
+ "type": "Note",
+ "contentMap": {
+ "en": "A simple note",
+ "es": "Una nota sencilla",
+ "zh-Hans": "一段简单的笔记"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/116.json b/acrate_astreams/tests/activitystreams/examples/116.json
new file mode 100644
index 0000000..e79ff81
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/116.json
@@ -0,0 +1,7 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "A simple note",
+ "type": "Note",
+ "mediaType": "text/markdown",
+ "content": "## A simple note\nA simple markdown `note`"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/117.json b/acrate_astreams/tests/activitystreams/examples/117.json
new file mode 100644
index 0000000..a0e2efd
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/117.json
@@ -0,0 +1,5 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Note",
+ "name": "A simple note"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/118.json b/acrate_astreams/tests/activitystreams/examples/118.json
new file mode 100644
index 0000000..5a01079
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/118.json
@@ -0,0 +1,9 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Note",
+ "nameMap": {
+ "en": "A simple note",
+ "es": "Una nota sencilla",
+ "zh-Hans": "一段简单的笔记"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/119.json b/acrate_astreams/tests/activitystreams/examples/119.json
new file mode 100644
index 0000000..e5e2a52
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/119.json
@@ -0,0 +1,7 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Video",
+ "name": "Birds Flying",
+ "url": "http://example.org/video.mkv",
+ "duration": "PT2H"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/12.json b/acrate_astreams/tests/activitystreams/examples/12.json
new file mode 100644
index 0000000..f7c7347
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/12.json
@@ -0,0 +1,10 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally added an object",
+ "type": "Add",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": "http://example.org/abc"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/120.json b/acrate_astreams/tests/activitystreams/examples/120.json
new file mode 100644
index 0000000..daad31f
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/120.json
@@ -0,0 +1,7 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Link",
+ "href": "http://example.org/image.png",
+ "height": 100,
+ "width": 100
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/121.json b/acrate_astreams/tests/activitystreams/examples/121.json
new file mode 100644
index 0000000..582ebb4
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/121.json
@@ -0,0 +1,7 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Link",
+ "href": "http://example.org/abc",
+ "mediaType": "text/html",
+ "name": "Previous"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/122.json b/acrate_astreams/tests/activitystreams/examples/122.json
new file mode 100644
index 0000000..eb68642
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/122.json
@@ -0,0 +1,8 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Link",
+ "href": "http://example.org/abc",
+ "hreflang": "en",
+ "mediaType": "text/html",
+ "name": "Previous"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/123.json b/acrate_astreams/tests/activitystreams/examples/123.json
new file mode 100644
index 0000000..383ce3b
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/123.json
@@ -0,0 +1,17 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Page 1 of Sally's notes",
+ "type": "CollectionPage",
+ "id": "http://example.org/collection?page=1",
+ "partOf": "http://example.org/collection",
+ "items": [
+ {
+ "type": "Note",
+ "name": "Pizza Toppings to Try"
+ },
+ {
+ "type": "Note",
+ "name": "Thought about California"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/124.json b/acrate_astreams/tests/activitystreams/examples/124.json
new file mode 100644
index 0000000..68e552b
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/124.json
@@ -0,0 +1,9 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Place",
+ "name": "Fresno Area",
+ "latitude": 36.75,
+ "longitude": 119.7667,
+ "radius": 15,
+ "units": "miles"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/125.json b/acrate_astreams/tests/activitystreams/examples/125.json
new file mode 100644
index 0000000..68e552b
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/125.json
@@ -0,0 +1,9 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Place",
+ "name": "Fresno Area",
+ "latitude": 36.75,
+ "longitude": 119.7667,
+ "radius": 15,
+ "units": "miles"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/126.json b/acrate_astreams/tests/activitystreams/examples/126.json
new file mode 100644
index 0000000..8937506
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/126.json
@@ -0,0 +1,8 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Link",
+ "href": "http://example.org/abc",
+ "hreflang": "en",
+ "mediaType": "text/html",
+ "name": "Next"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/127.json b/acrate_astreams/tests/activitystreams/examples/127.json
new file mode 100644
index 0000000..0aeffb1
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/127.json
@@ -0,0 +1,7 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Event",
+ "name": "Going-Away Party for Jim",
+ "startTime": "2014-12-31T23:00:00-08:00",
+ "endTime": "2015-01-01T06:00:00-08:00"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/128.json b/acrate_astreams/tests/activitystreams/examples/128.json
new file mode 100644
index 0000000..862b48a
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/128.json
@@ -0,0 +1,7 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "A simple note",
+ "type": "Note",
+ "content": "Fish swim.",
+ "published": "2014-12-12T12:12:12Z"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/129.json b/acrate_astreams/tests/activitystreams/examples/129.json
new file mode 100644
index 0000000..d808fb8
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/129.json
@@ -0,0 +1,8 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Event",
+ "name": "Going-Away Party for Jim",
+ "startTime": "2014-12-31T23:00:00-08:00",
+ "endTime": "2015-01-01T06:00:00-08:00"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/13.json b/acrate_astreams/tests/activitystreams/examples/13.json
new file mode 100644
index 0000000..3b35922
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/13.json
@@ -0,0 +1,22 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally added a picture of her cat to her cat picture collection",
+ "type": "Add",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": {
+ "type": "Image",
+ "name": "A picture of my cat",
+ "url": "http://example.org/img/cat.png"
+ },
+ "origin": {
+ "type": "Collection",
+ "name": "Camera Roll"
+ },
+ "target": {
+ "type": "Collection",
+ "name": "My Cat Pictures"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/130.json b/acrate_astreams/tests/activitystreams/examples/130.json
new file mode 100644
index 0000000..68e552b
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/130.json
@@ -0,0 +1,9 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Place",
+ "name": "Fresno Area",
+ "latitude": 36.75,
+ "longitude": 119.7667,
+ "radius": 15,
+ "units": "miles"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/131.json b/acrate_astreams/tests/activitystreams/examples/131.json
new file mode 100644
index 0000000..aad9d56
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/131.json
@@ -0,0 +1,9 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Link",
+ "href": "http://example.org/abc",
+ "hreflang": "en",
+ "mediaType": "text/html",
+ "name": "Preview",
+ "rel": ["canonical", "preview"]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/132.json b/acrate_astreams/tests/activitystreams/examples/132.json
new file mode 100644
index 0000000..2f3796c
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/132.json
@@ -0,0 +1,16 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Page 1 of Sally's notes",
+ "type": "OrderedCollectionPage",
+ "startIndex": 0,
+ "orderedItems": [
+ {
+ "type": "Note",
+ "name": "Density of Water"
+ },
+ {
+ "type": "Note",
+ "name": "Air Mattress Idea"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/133.json b/acrate_astreams/tests/activitystreams/examples/133.json
new file mode 100644
index 0000000..15cdbd3
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/133.json
@@ -0,0 +1,6 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "name": "Cane Sugar Processing",
+ "type": "Note",
+ "summary": "A simple note"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/134.json b/acrate_astreams/tests/activitystreams/examples/134.json
new file mode 100644
index 0000000..7cea62a
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/134.json
@@ -0,0 +1,10 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "name": "Cane Sugar Processing",
+ "type": "Note",
+ "summaryMap": {
+ "en": "A simple note",
+ "es": "Una nota sencilla",
+ "zh-Hans": "一段简单的笔记"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/135.json b/acrate_astreams/tests/activitystreams/examples/135.json
new file mode 100644
index 0000000..3520d2d
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/135.json
@@ -0,0 +1,16 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally's notes",
+ "type": "Collection",
+ "totalItems": 2,
+ "items": [
+ {
+ "type": "Note",
+ "name": "Which Staircase Should I Use"
+ },
+ {
+ "type": "Note",
+ "name": "Something to Remember"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/136.json b/acrate_astreams/tests/activitystreams/examples/136.json
new file mode 100644
index 0000000..68e552b
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/136.json
@@ -0,0 +1,9 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Place",
+ "name": "Fresno Area",
+ "latitude": 36.75,
+ "longitude": 119.7667,
+ "radius": 15,
+ "units": "miles"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/137.json b/acrate_astreams/tests/activitystreams/examples/137.json
new file mode 100644
index 0000000..79de139
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/137.json
@@ -0,0 +1,7 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "name": "Cranberry Sauce Idea",
+ "type": "Note",
+ "content": "Mush it up so it does not have the same shape as the can.",
+ "updated": "2014-12-12T12:12:12Z"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/138.json b/acrate_astreams/tests/activitystreams/examples/138.json
new file mode 100644
index 0000000..daad31f
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/138.json
@@ -0,0 +1,7 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Link",
+ "href": "http://example.org/image.png",
+ "height": 100,
+ "width": 100
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/139.json b/acrate_astreams/tests/activitystreams/examples/139.json
new file mode 100644
index 0000000..bc94ae0
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/139.json
@@ -0,0 +1,14 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally is an acquaintance of John's",
+ "type": "Relationship",
+ "subject": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "relationship": "http://purl.org/vocab/relationship/acquaintanceOf",
+ "object": {
+ "type": "Person",
+ "name": "John"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/14.json b/acrate_astreams/tests/activitystreams/examples/14.json
new file mode 100644
index 0000000..1809f3b
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/14.json
@@ -0,0 +1,17 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally arrived at work",
+ "type": "Arrive",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "location": {
+ "type": "Place",
+ "name": "Work"
+ },
+ "origin": {
+ "type": "Place",
+ "name": "Home"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/140.json b/acrate_astreams/tests/activitystreams/examples/140.json
new file mode 100644
index 0000000..bc94ae0
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/140.json
@@ -0,0 +1,14 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally is an acquaintance of John's",
+ "type": "Relationship",
+ "subject": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "relationship": "http://purl.org/vocab/relationship/acquaintanceOf",
+ "object": {
+ "type": "Person",
+ "name": "John"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/141.json b/acrate_astreams/tests/activitystreams/examples/141.json
new file mode 100644
index 0000000..697d828
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/141.json
@@ -0,0 +1,11 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally's profile",
+ "type": "Profile",
+ "describes": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "url": "http://sally.example.org"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/142.json b/acrate_astreams/tests/activitystreams/examples/142.json
new file mode 100644
index 0000000..c618224
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/142.json
@@ -0,0 +1,7 @@
+{
+"@context": "https://www.w3.org/ns/activitystreams",
+"summary": "This image has been deleted",
+"type": "Tombstone",
+"formerType": "Image",
+"url": "http://example.org/image/2"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/143.json b/acrate_astreams/tests/activitystreams/examples/143.json
new file mode 100644
index 0000000..099e5ac
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/143.json
@@ -0,0 +1,6 @@
+{
+"@context": "https://www.w3.org/ns/activitystreams",
+"summary": "This image has been deleted",
+"type": "Tombstone",
+"deleted": "2016-05-03T00:00:00Z"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/144.json b/acrate_astreams/tests/activitystreams/examples/144.json
new file mode 100644
index 0000000..78f0f20
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/144.json
@@ -0,0 +1,44 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Activities in Project XYZ",
+ "type": "Collection",
+ "items": [
+ {
+ "summary": "Sally created a note",
+ "type": "Create",
+ "id": "http://activities.example.com/1",
+ "actor": "http://sally.example.org",
+ "object": {
+ "summary": "A note",
+ "type": "Note",
+ "id": "http://notes.example.com/1",
+ "content": "A note"
+ },
+ "context": {
+ "type": "http://example.org/Project",
+ "name": "Project XYZ"
+ },
+ "audience": {
+ "type": "Group",
+ "name": "Project XYZ Working Group"
+ },
+ "to": "http://john.example.org"
+ },
+ {
+ "summary": "John liked Sally's note",
+ "type": "Like",
+ "id": "http://activities.example.com/1",
+ "actor": "http://john.example.org",
+ "object": "http://notes.example.com/1",
+ "context": {
+ "type": "http://example.org/Project",
+ "name": "Project XYZ"
+ },
+ "audience": {
+ "type": "Group",
+ "name": "Project XYZ Working Group"
+ },
+ "to": "http://sally.example.org"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/145.json b/acrate_astreams/tests/activitystreams/examples/145.json
new file mode 100644
index 0000000..214ce16
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/145.json
@@ -0,0 +1,33 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally's friends list",
+ "type": "Collection",
+ "items": [
+ {
+ "summary": "Sally is influenced by Joe",
+ "type": "Relationship",
+ "subject": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "relationship": "http://purl.org/vocab/relationship/influencedBy",
+ "object": {
+ "type": "Person",
+ "name": "Joe"
+ }
+ },
+ {
+ "summary": "Sally is a friend of Jane",
+ "type": "Relationship",
+ "subject": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "relationship": "http://purl.org/vocab/relationship/friendOf",
+ "object": {
+ "type": "Person",
+ "name": "Jane"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/146.json b/acrate_astreams/tests/activitystreams/examples/146.json
new file mode 100644
index 0000000..26b00f1
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/146.json
@@ -0,0 +1,13 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally became a friend of Matt",
+ "type": "Create",
+ "actor": "http://sally.example.org",
+ "object": {
+ "type": "Relationship",
+ "subject": "http://sally.example.org",
+ "relationship": "http://purl.org/vocab/relationship/friendOf",
+ "object": "http://matt.example.org",
+ "startTime": "2015-04-21T12:34:56"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/147.json b/acrate_astreams/tests/activitystreams/examples/147.json
new file mode 100644
index 0000000..579a663
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/147.json
@@ -0,0 +1,17 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "id": "http://example.org/connection-requests/123",
+ "summary": "Sally requested to be a friend of John",
+ "type": "Offer",
+ "actor": "acct:sally@example.org",
+ "object": {
+ "summary": "Sally and John's friendship",
+ "id": "http://example.org/connections/123",
+ "type": "Relationship",
+ "subject": "acct:sally@example.org",
+ "relationship": "http://purl.org/vocab/relationship/friendOf",
+ "object": "acct:john@example.org"
+ },
+ "target": "acct:john@example.org"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/148.json b/acrate_astreams/tests/activitystreams/examples/148.json
new file mode 100644
index 0000000..1076b88
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/148.json
@@ -0,0 +1,62 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally and John's relationship history",
+ "type": "Collection",
+ "items": [
+ {
+ "summary": "John accepted Sally's friend request",
+ "id": "http://example.org/activities/122",
+ "type": "Accept",
+ "actor": "acct:john@example.org",
+ "object": "http://example.org/connection-requests/123",
+ "inReplyTo": "http://example.org/connection-requests/123",
+ "context": "http://example.org/connections/123",
+ "result": [
+ "http://example.org/activities/123",
+ "http://example.org/activities/124",
+ "http://example.org/activities/125",
+ "http://example.org/activities/126"
+ ]
+ },
+ {
+ "summary": "John followed Sally",
+ "id": "http://example.org/activities/123",
+ "type": "Follow",
+ "actor": "acct:john@example.org",
+ "object": "acct:sally@example.org",
+ "context": "http://example.org/connections/123"
+ },
+ {
+ "summary": "Sally followed John",
+ "id": "http://example.org/activities/124",
+ "type": "Follow",
+ "actor": "acct:sally@example.org",
+ "object": "acct:john@example.org",
+ "context": "http://example.org/connections/123"
+ },
+ {
+ "summary": "John added Sally to his friends list",
+ "id": "http://example.org/activities/125",
+ "type": "Add",
+ "actor": "acct:john@example.org",
+ "object": "http://example.org/connections/123",
+ "target": {
+ "type": "Collection",
+ "summary": "John's Connections"
+ },
+ "context": "http://example.org/connections/123"
+ },
+ {
+ "summary": "Sally added John to her friends list",
+ "id": "http://example.org/activities/126",
+ "type": "Add",
+ "actor": "acct:sally@example.org",
+ "object": "http://example.org/connections/123",
+ "target": {
+ "type": "Collection",
+ "summary": "Sally's Connections"
+ },
+ "context": "http://example.org/connections/123"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/149.json b/acrate_astreams/tests/activitystreams/examples/149.json
new file mode 100644
index 0000000..20e48dd
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/149.json
@@ -0,0 +1,5 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Place",
+ "name": "San Francisco, CA"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/15.json b/acrate_astreams/tests/activitystreams/examples/15.json
new file mode 100644
index 0000000..e37f129
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/15.json
@@ -0,0 +1,14 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally created a note",
+ "type": "Create",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": {
+ "type": "Note",
+ "name": "A Simple Note",
+ "content": "This is a simple note"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/150.json b/acrate_astreams/tests/activitystreams/examples/150.json
new file mode 100644
index 0000000..7962a5d
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/150.json
@@ -0,0 +1,8 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Place",
+ "name": "San Francisco, CA",
+ "longitude": "122.4167",
+ "latitude": "37.7833"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/151.json b/acrate_astreams/tests/activitystreams/examples/151.json
new file mode 100644
index 0000000..6475dfc
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/151.json
@@ -0,0 +1,8 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "name": "A question about robots",
+ "id": "http://help.example.org/question/1",
+ "type": "Question",
+ "content": "I'd like to build a robot to feed my cat. Should I use Arduino or Raspberry Pi?"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/152.json b/acrate_astreams/tests/activitystreams/examples/152.json
new file mode 100644
index 0000000..0335198
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/152.json
@@ -0,0 +1,11 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "id": "http://polls.example.org/question/1",
+ "name": "A question about robots",
+ "type": "Question",
+ "content": "I'd like to build a robot to feed my cat. Which platform is best?",
+ "oneOf": [
+ {"name": "arduino"},
+ {"name": "raspberry pi"}
+ ]
+ }
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/153.json b/acrate_astreams/tests/activitystreams/examples/153.json
new file mode 100644
index 0000000..9115ca5
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/153.json
@@ -0,0 +1,6 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "attributedTo": "http://sally.example.org",
+ "inReplyTo": "http://polls.example.org/question/1",
+ "name": "arduino"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/154.json b/acrate_astreams/tests/activitystreams/examples/154.json
new file mode 100644
index 0000000..c6e45aa
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/154.json
@@ -0,0 +1,36 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "name": "A question about robots",
+ "id": "http://polls.example.org/question/1",
+ "type": "Question",
+ "content": "I'd like to build a robot to feed my cat. Which platform is best?",
+ "oneOf": [
+ {"name": "arduino"},
+ {"name": "raspberry pi"}
+ ],
+ "replies": {
+ "type": "Collection",
+ "totalItems": 3,
+ "items": [
+ {
+ "attributedTo": "http://sally.example.org",
+ "inReplyTo": "http://polls.example.org/question/1",
+ "name": "arduino"
+ },
+ {
+ "attributedTo": "http://joe.example.org",
+ "inReplyTo": "http://polls.example.org/question/1",
+ "name": "arduino"
+ },
+ {
+ "attributedTo": "http://john.example.org",
+ "inReplyTo": "http://polls.example.org/question/1",
+ "name": "raspberry pi"
+ }
+ ]
+ },
+ "result": {
+ "type": "Note",
+ "content": "Users are favoriting "arduino" by a 33% margin."
+ }
+ }
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/155.json b/acrate_astreams/tests/activitystreams/examples/155.json
new file mode 100644
index 0000000..eb08cf9
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/155.json
@@ -0,0 +1,35 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "History of John's note",
+ "type": "Collection",
+ "items": [
+ {
+ "summary": "Sally liked John's note",
+ "type": "Like",
+ "actor": "http://sally.example.org",
+ "id": "http://activities.example.com/1",
+ "published": "2015-11-12T12:34:56Z",
+ "object": {
+ "summary": "John's note",
+ "type": "Note",
+ "id": "http://notes.example.com/1",
+ "attributedTo": "http://john.example.org",
+ "content": "My note"
+ }
+ },
+ {
+ "summary": "Sally disliked John's note",
+ "type": "Dislike",
+ "actor": "http://sally.example.org",
+ "id": "http://activities.example.com/2",
+ "published": "2015-12-11T21:43:56Z",
+ "object": {
+ "summary": "John's note",
+ "type": "Note",
+ "id": "http://notes.example.com/1",
+ "attributedTo": "http://john.example.org",
+ "content": "My note"
+ }
+ }
+ ]
+ }
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/156.json b/acrate_astreams/tests/activitystreams/examples/156.json
new file mode 100644
index 0000000..b2a10a8
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/156.json
@@ -0,0 +1,29 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "History of John's note",
+ "type": "Collection",
+ "items": [
+ {
+ "summary": "Sally liked John's note",
+ "type": "Like",
+ "id": "http://activities.example.com/1",
+ "actor": "http://sally.example.org",
+ "published": "2015-11-12T12:34:56Z",
+ "object": {
+ "summary": "John's note",
+ "type": "Note",
+ "id": "http://notes.example.com/1",
+ "attributedTo": "http://john.example.org",
+ "content": "My note"
+ }
+ },
+ {
+ "summary": "Sally no longer likes John's note",
+ "type": "Undo",
+ "id": "http://activities.example.com/2",
+ "actor": "http://sally.example.org",
+ "published": "2015-12-11T21:43:56Z",
+ "object": "http://activities.example.com/1"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/157.json b/acrate_astreams/tests/activitystreams/examples/157.json
new file mode 100644
index 0000000..9f31931
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/157.json
@@ -0,0 +1,17 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "name": "A thank-you note",
+ "type": "Note",
+ "content": "Thank you @sally
+ for all your hard work!
+ #givingthanks",
+ "to": {
+ "name": "Sally",
+ "type": "Person",
+ "id": "http://sally.example.org"
+ },
+ "tag": {
+ "id": "http://example.org/tags/givingthanks",
+ "name": "#givingthanks"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/158.json b/acrate_astreams/tests/activitystreams/examples/158.json
new file mode 100644
index 0000000..553e07d
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/158.json
@@ -0,0 +1,17 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "name": "A thank-you note",
+ "type": "Note",
+ "content": "Thank you @sally for all your hard work! #givingthanks",
+ "tag": [
+ {
+ "type": "Mention",
+ "href": "http://example.org/people/sally",
+ "name": "@sally"
+ },
+ {
+ "id": "http://example.org/tags/givingthanks",
+ "name": "#givingthanks"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/159.json b/acrate_astreams/tests/activitystreams/examples/159.json
new file mode 100644
index 0000000..cdbf474
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/159.json
@@ -0,0 +1,18 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally moved the sales figures from Folder A to Folder B",
+ "type": "Move",
+ "actor": "http://sally.example.org",
+ "object": {
+ "type": "Document",
+ "name": "sales figures"
+ },
+ "origin": {
+ "type": "Collection",
+ "name": "Folder A"
+ },
+ "target": {
+ "type": "Collection",
+ "name": "Folder B"
+ }
+ }
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/16.json b/acrate_astreams/tests/activitystreams/examples/16.json
new file mode 100644
index 0000000..def4520
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/16.json
@@ -0,0 +1,14 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally deleted a note",
+ "type": "Delete",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": "http://example.org/notes/1",
+ "origin": {
+ "type": "Collection",
+ "name": "Sally's Notes"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/17.json b/acrate_astreams/tests/activitystreams/examples/17.json
new file mode 100644
index 0000000..b17da27
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/17.json
@@ -0,0 +1,13 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally followed John",
+ "type": "Follow",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": {
+ "type": "Person",
+ "name": "John"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/18.json b/acrate_astreams/tests/activitystreams/examples/18.json
new file mode 100644
index 0000000..b58e363
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/18.json
@@ -0,0 +1,10 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally ignored a note",
+ "type": "Ignore",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": "http://example.org/notes/1"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/19.json b/acrate_astreams/tests/activitystreams/examples/19.json
new file mode 100644
index 0000000..48af43e
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/19.json
@@ -0,0 +1,13 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally joined a group",
+ "type": "Join",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": {
+ "type": "Group",
+ "name": "A Simple Group"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/2.json b/acrate_astreams/tests/activitystreams/examples/2.json
new file mode 100644
index 0000000..acc7490
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/2.json
@@ -0,0 +1,8 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Link",
+ "href": "http://example.org/abc",
+ "hreflang": "en",
+ "mediaType": "text/html",
+ "name": "An example link"
+}
diff --git a/acrate_astreams/tests/activitystreams/examples/20.json b/acrate_astreams/tests/activitystreams/examples/20.json
new file mode 100644
index 0000000..9b0f190
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/20.json
@@ -0,0 +1,13 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally left work",
+ "type": "Leave",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": {
+ "type": "Place",
+ "name": "Work"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/21.json b/acrate_astreams/tests/activitystreams/examples/21.json
new file mode 100644
index 0000000..be9f8bd
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/21.json
@@ -0,0 +1,13 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally left a group",
+ "type": "Leave",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": {
+ "type": "Group",
+ "name": "A Simple Group"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/22.json b/acrate_astreams/tests/activitystreams/examples/22.json
new file mode 100644
index 0000000..736bfff
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/22.json
@@ -0,0 +1,10 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally liked a note",
+ "type": "Like",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": "http://example.org/notes/1"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/23.json b/acrate_astreams/tests/activitystreams/examples/23.json
new file mode 100644
index 0000000..9ee285a
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/23.json
@@ -0,0 +1,17 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally offered 50% off to Lewis",
+ "type": "Offer",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": {
+ "type": "http://www.types.example/ProductOffer",
+ "name": "50% Off!"
+ },
+ "target": {
+ "type": "Person",
+ "name": "Lewis"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/24.json b/acrate_astreams/tests/activitystreams/examples/24.json
new file mode 100644
index 0000000..7d9c634
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/24.json
@@ -0,0 +1,23 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally invited John and Lisa to a party",
+ "type": "Invite",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": {
+ "type": "Event",
+ "name": "A Party"
+ },
+ "target": [
+ {
+ "type": "Person",
+ "name": "John"
+ },
+ {
+ "type": "Person",
+ "name": "Lisa"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/25.json b/acrate_astreams/tests/activitystreams/examples/25.json
new file mode 100644
index 0000000..5b9e53a
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/25.json
@@ -0,0 +1,18 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally rejected an invitation to a party",
+ "type": "Reject",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": {
+ "type": "Invite",
+ "actor": "http://john.example.org",
+ "object": {
+ "type": "Event",
+ "name": "Going-Away Party for Jim"
+ }
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/26.json b/acrate_astreams/tests/activitystreams/examples/26.json
new file mode 100644
index 0000000..1b424b3
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/26.json
@@ -0,0 +1,18 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally tentatively rejected an invitation to a party",
+ "type": "TentativeReject",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": {
+ "type": "Invite",
+ "actor": "http://john.example.org",
+ "object": {
+ "type": "Event",
+ "name": "Going-Away Party for Jim"
+ }
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/27.json b/acrate_astreams/tests/activitystreams/examples/27.json
new file mode 100644
index 0000000..a30d97e
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/27.json
@@ -0,0 +1,14 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally removed a note from her notes folder",
+ "type": "Remove",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": "http://example.org/notes/1",
+ "target": {
+ "type": "Collection",
+ "name": "Notes Folder"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/28.json b/acrate_astreams/tests/activitystreams/examples/28.json
new file mode 100644
index 0000000..fe9c25d
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/28.json
@@ -0,0 +1,17 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "The moderator removed Sally from a group",
+ "type": "Remove",
+ "actor": {
+ "type": "http://example.org/Role",
+ "name": "The Moderator"
+ },
+ "object": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "origin": {
+ "type": "Group",
+ "name": "A Simple Group"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/29.json b/acrate_astreams/tests/activitystreams/examples/29.json
new file mode 100644
index 0000000..6880b2a
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/29.json
@@ -0,0 +1,13 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally retracted her offer to John",
+ "type": "Undo",
+ "actor": "http://sally.example.org",
+ "object": {
+ "type": "Offer",
+ "actor": "http://sally.example.org",
+ "object": "http://example.org/posts/1",
+ "target": "http://john.example.org"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/3.json b/acrate_astreams/tests/activitystreams/examples/3.json
new file mode 100644
index 0000000..5b03c30
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/3.json
@@ -0,0 +1,13 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Activity",
+ "summary": "Sally did something to a note",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": {
+ "type": "Note",
+ "name": "A Note"
+ }
+}
diff --git a/acrate_astreams/tests/activitystreams/examples/30.json b/acrate_astreams/tests/activitystreams/examples/30.json
new file mode 100644
index 0000000..91e5de3
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/30.json
@@ -0,0 +1,10 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally updated her note",
+ "type": "Update",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": "http://example.org/notes/1"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/31.json b/acrate_astreams/tests/activitystreams/examples/31.json
new file mode 100644
index 0000000..6a9a963
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/31.json
@@ -0,0 +1,14 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally read an article",
+ "type": "View",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": {
+ "type": "Article",
+ "name": "What You Should Know About Activity Streams"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/32.json b/acrate_astreams/tests/activitystreams/examples/32.json
new file mode 100644
index 0000000..6c4508f
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/32.json
@@ -0,0 +1,11 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally listened to a piece of music",
+ "type": "Listen",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": "http://example.org/music.mp3"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/33.json b/acrate_astreams/tests/activitystreams/examples/33.json
new file mode 100644
index 0000000..b5ee229
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/33.json
@@ -0,0 +1,11 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally read a blog post",
+ "type": "Read",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": "http://example.org/posts/1"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/34.json b/acrate_astreams/tests/activitystreams/examples/34.json
new file mode 100644
index 0000000..33c2550
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/34.json
@@ -0,0 +1,18 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally moved a post from List A to List B",
+ "type": "Move",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": "http://example.org/posts/1",
+ "target": {
+ "type": "Collection",
+ "name": "List B"
+ },
+ "origin": {
+ "type": "Collection",
+ "name": "List A"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/35.json b/acrate_astreams/tests/activitystreams/examples/35.json
new file mode 100644
index 0000000..63de2fd
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/35.json
@@ -0,0 +1,17 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally went home from work",
+ "type": "Travel",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "target": {
+ "type": "Place",
+ "name": "Home"
+ },
+ "origin": {
+ "type": "Place",
+ "name": "Work"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/36.json b/acrate_astreams/tests/activitystreams/examples/36.json
new file mode 100644
index 0000000..d6c36f3
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/36.json
@@ -0,0 +1,18 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally announced that she had arrived at work",
+ "type": "Announce",
+ "actor": {
+ "type": "Person",
+ "id": "http://sally.example.org",
+ "name": "Sally"
+ },
+ "object": {
+ "type": "Arrive",
+ "actor": "http://sally.example.org",
+ "location": {
+ "type": "Place",
+ "name": "Work"
+ }
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/37.json b/acrate_astreams/tests/activitystreams/examples/37.json
new file mode 100644
index 0000000..4ce81b7
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/37.json
@@ -0,0 +1,8 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally blocked Joe",
+ "type": "Block",
+ "actor": "http://sally.example.org",
+ "object": "http://joe.example.org"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/38.json b/acrate_astreams/tests/activitystreams/examples/38.json
new file mode 100644
index 0000000..1ef6917
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/38.json
@@ -0,0 +1,10 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally flagged an inappropriate note",
+ "type": "Flag",
+ "actor": "http://sally.example.org",
+ "object": {
+ "type": "Note",
+ "content": "An inappropriate note"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/39.json b/acrate_astreams/tests/activitystreams/examples/39.json
new file mode 100644
index 0000000..01462ad
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/39.json
@@ -0,0 +1,8 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally disliked a post",
+ "type": "Dislike",
+ "actor": "http://sally.example.org",
+ "object": "http://example.org/posts/1"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/4.json b/acrate_astreams/tests/activitystreams/examples/4.json
new file mode 100644
index 0000000..d02cd77
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/4.json
@@ -0,0 +1,13 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Travel",
+ "summary": "Sally went to work",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "target": {
+ "type": "Place",
+ "name": "Work"
+ }
+}
diff --git a/acrate_astreams/tests/activitystreams/examples/40.json b/acrate_astreams/tests/activitystreams/examples/40.json
new file mode 100644
index 0000000..d918689
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/40.json
@@ -0,0 +1,15 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Question",
+ "name": "What is the answer?",
+ "oneOf": [
+ {
+ "type": "Note",
+ "name": "Option A"
+ },
+ {
+ "type": "Note",
+ "name": "Option B"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/41.json b/acrate_astreams/tests/activitystreams/examples/41.json
new file mode 100644
index 0000000..794dd0a
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/41.json
@@ -0,0 +1,6 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Question",
+ "name": "What is the answer?",
+ "closed": "2016-05-10T00:00:00Z"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/42.json b/acrate_astreams/tests/activitystreams/examples/42.json
new file mode 100644
index 0000000..ae31404
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/42.json
@@ -0,0 +1,5 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Application",
+ "name": "Exampletron 3000"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/43.json b/acrate_astreams/tests/activitystreams/examples/43.json
new file mode 100644
index 0000000..26ab6be
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/43.json
@@ -0,0 +1,6 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Group",
+ "name": "Big Beards of Austin"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/44.json b/acrate_astreams/tests/activitystreams/examples/44.json
new file mode 100644
index 0000000..320979c
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/44.json
@@ -0,0 +1,5 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Organization",
+ "name": "Example Co."
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/45.json b/acrate_astreams/tests/activitystreams/examples/45.json
new file mode 100644
index 0000000..9957501
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/45.json
@@ -0,0 +1,6 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Person",
+ "name": "Sally Smith"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/46.json b/acrate_astreams/tests/activitystreams/examples/46.json
new file mode 100644
index 0000000..f24ae30
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/46.json
@@ -0,0 +1,5 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Service",
+ "name": "Acme Web Service"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/47.json b/acrate_astreams/tests/activitystreams/examples/47.json
new file mode 100644
index 0000000..f5bf6b7
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/47.json
@@ -0,0 +1,14 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally is an acquaintance of John",
+ "type": "Relationship",
+ "subject": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "relationship": "http://purl.org/vocab/relationship/acquaintanceOf",
+ "object": {
+ "type": "Person",
+ "name": "John"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/48.json b/acrate_astreams/tests/activitystreams/examples/48.json
new file mode 100644
index 0000000..979de0b
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/48.json
@@ -0,0 +1,7 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Article",
+ "name": "What a Crazy Day I Had",
+ "content": "... you will never believe ...
",
+ "attributedTo": "http://sally.example.org"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/49.json b/acrate_astreams/tests/activitystreams/examples/49.json
new file mode 100644
index 0000000..4fa874a
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/49.json
@@ -0,0 +1,6 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Document",
+ "name": "4Q Sales Forecast",
+ "url": "http://example.org/4q-sales-forecast.pdf"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/5.json b/acrate_astreams/tests/activitystreams/examples/5.json
new file mode 100644
index 0000000..32a4b2d
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/5.json
@@ -0,0 +1,16 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally's notes",
+ "type": "Collection",
+ "totalItems": 2,
+ "items": [
+ {
+ "type": "Note",
+ "name": "A Simple Note"
+ },
+ {
+ "type": "Note",
+ "name": "Another Simple Note"
+ }
+ ]
+}
diff --git a/acrate_astreams/tests/activitystreams/examples/50.json b/acrate_astreams/tests/activitystreams/examples/50.json
new file mode 100644
index 0000000..9d6fed2
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/50.json
@@ -0,0 +1,10 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Audio",
+ "name": "Interview With A Famous Technologist",
+ "url": {
+ "type": "Link",
+ "href": "http://example.org/podcast.mp3",
+ "mediaType": "audio/mp3"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/51.json b/acrate_astreams/tests/activitystreams/examples/51.json
new file mode 100644
index 0000000..f36a4ec
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/51.json
@@ -0,0 +1,17 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Image",
+ "name": "Cat Jumping on Wagon",
+ "url": [
+ {
+ "type": "Link",
+ "href": "http://example.org/image.jpeg",
+ "mediaType": "image/jpeg"
+ },
+ {
+ "type": "Link",
+ "href": "http://example.org/image.png",
+ "mediaType": "image/png"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/52.json b/acrate_astreams/tests/activitystreams/examples/52.json
new file mode 100644
index 0000000..1959e2f
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/52.json
@@ -0,0 +1,8 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Video",
+ "name": "Puppy Plays With Ball",
+ "url": "http://example.org/video.mkv",
+ "duration": "PT2H"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/53.json b/acrate_astreams/tests/activitystreams/examples/53.json
new file mode 100644
index 0000000..c949521
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/53.json
@@ -0,0 +1,6 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Note",
+ "name": "A Word of Warning",
+ "content": "Looks like it is going to rain today. Bring an umbrella!"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/54.json b/acrate_astreams/tests/activitystreams/examples/54.json
new file mode 100644
index 0000000..c95bfe2
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/54.json
@@ -0,0 +1,7 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Page",
+ "name": "Omaha Weather Report",
+ "url": "http://example.org/weather-in-omaha.html"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/55.json b/acrate_astreams/tests/activitystreams/examples/55.json
new file mode 100644
index 0000000..0aeffb1
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/55.json
@@ -0,0 +1,7 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Event",
+ "name": "Going-Away Party for Jim",
+ "startTime": "2014-12-31T23:00:00-08:00",
+ "endTime": "2015-01-01T06:00:00-08:00"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/56.json b/acrate_astreams/tests/activitystreams/examples/56.json
new file mode 100644
index 0000000..0c56f05
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/56.json
@@ -0,0 +1,5 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Place",
+ "name": "Work"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/57.json b/acrate_astreams/tests/activitystreams/examples/57.json
new file mode 100644
index 0000000..68e552b
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/57.json
@@ -0,0 +1,9 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Place",
+ "name": "Fresno Area",
+ "latitude": 36.75,
+ "longitude": 119.7667,
+ "radius": 15,
+ "units": "miles"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/58.json b/acrate_astreams/tests/activitystreams/examples/58.json
new file mode 100644
index 0000000..2e83552
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/58.json
@@ -0,0 +1,7 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Mention of Joe by Carrie in her note",
+ "type": "Mention",
+ "href": "http://example.org/joe",
+ "name": "Joe"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/59.json b/acrate_astreams/tests/activitystreams/examples/59.json
new file mode 100644
index 0000000..b447b95
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/59.json
@@ -0,0 +1,9 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Profile",
+ "summary": "Sally's Profile",
+ "describes": {
+ "type": "Person",
+ "name": "Sally Smith"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/6.json b/acrate_astreams/tests/activitystreams/examples/6.json
new file mode 100644
index 0000000..643c0fa
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/6.json
@@ -0,0 +1,16 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally's notes",
+ "type": "OrderedCollection",
+ "totalItems": 2,
+ "orderedItems": [
+ {
+ "type": "Note",
+ "name": "A Simple Note"
+ },
+ {
+ "type": "Note",
+ "name": "Another Simple Note"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/60.json b/acrate_astreams/tests/activitystreams/examples/60.json
new file mode 100644
index 0000000..495e12b
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/60.json
@@ -0,0 +1,21 @@
+{
+ "type": "OrderedCollection",
+ "totalItems": 3,
+ "name": "Vacation photos 2016",
+ "orderedItems": [
+ {
+ "type": "Image",
+ "id": "http://image.example/1"
+ },
+ {
+ "type": "Tombstone",
+ "formerType": "Image",
+ "id": "http://image.example/2",
+ "deleted": "2016-03-17T00:00:00Z"
+ },
+ {
+ "type": "Image",
+ "id": "http://image.example/3"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/61.json b/acrate_astreams/tests/activitystreams/examples/61.json
new file mode 100644
index 0000000..559e844
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/61.json
@@ -0,0 +1,5 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "name": "Foo",
+ "id": "http://example.org/foo"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/62.json b/acrate_astreams/tests/activitystreams/examples/62.json
new file mode 100644
index 0000000..37a60ef
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/62.json
@@ -0,0 +1,5 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "A foo",
+ "type": "http://example.org/Foo"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/63.json b/acrate_astreams/tests/activitystreams/examples/63.json
new file mode 100644
index 0000000..6aa444d
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/63.json
@@ -0,0 +1,7 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally offered the Foo object",
+ "type": "Offer",
+ "actor": "http://sally.example.org",
+ "object": "http://example.org/foo"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/64.json b/acrate_astreams/tests/activitystreams/examples/64.json
new file mode 100644
index 0000000..0a12477
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/64.json
@@ -0,0 +1,11 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally offered the Foo object",
+ "type": "Offer",
+ "actor": {
+ "type": "Person",
+ "id": "http://sally.example.org",
+ "summary": "Sally"
+ },
+ "object": "http://example.org/foo"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/65.json b/acrate_astreams/tests/activitystreams/examples/65.json
new file mode 100644
index 0000000..fd353b6
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/65.json
@@ -0,0 +1,14 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally and Joe offered the Foo object",
+ "type": "Offer",
+ "actor": [
+ "http://joe.example.org",
+ {
+ "type": "Person",
+ "id": "http://sally.example.org",
+ "name": "Sally"
+ }
+ ],
+ "object": "http://example.org/foo"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/66.json b/acrate_astreams/tests/activitystreams/examples/66.json
new file mode 100644
index 0000000..69a3ff1
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/66.json
@@ -0,0 +1,12 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Note",
+ "name": "Have you seen my cat?",
+ "attachment": [
+ {
+ "type": "Image",
+ "content": "This is what he looks like.",
+ "url": "http://example.org/cat.jpeg"
+ }
+ ]
+}
diff --git a/acrate_astreams/tests/activitystreams/examples/67.json b/acrate_astreams/tests/activitystreams/examples/67.json
new file mode 100644
index 0000000..1523edb
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/67.json
@@ -0,0 +1,12 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Image",
+ "name": "My cat taking a nap",
+ "url": "http://example.org/cat.jpeg",
+ "attributedTo": [
+ {
+ "type": "Person",
+ "name": "Sally"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/68.json b/acrate_astreams/tests/activitystreams/examples/68.json
new file mode 100644
index 0000000..93f17ed
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/68.json
@@ -0,0 +1,13 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Image",
+ "name": "My cat taking a nap",
+ "url": "http://example.org/cat.jpeg",
+ "attributedTo": [
+ "http://joe.example.org",
+ {
+ "type": "Person",
+ "name": "Sally"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/69.json b/acrate_astreams/tests/activitystreams/examples/69.json
new file mode 100644
index 0000000..331dab6
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/69.json
@@ -0,0 +1,10 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "name": "Holiday announcement",
+ "type": "Note",
+ "content": "Thursday will be a company-wide holiday. Enjoy your day off!",
+ "audience": {
+ "type": "http://example.org/Organization",
+ "name": "ExampleCo LLC"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/7.json b/acrate_astreams/tests/activitystreams/examples/7.json
new file mode 100644
index 0000000..23742df
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/7.json
@@ -0,0 +1,17 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Page 1 of Sally's notes",
+ "type": "CollectionPage",
+ "id": "http://example.org/foo?page=1",
+ "partOf": "http://example.org/foo",
+ "items": [
+ {
+ "type": "Note",
+ "name": "A Simple Note"
+ },
+ {
+ "type": "Note",
+ "name": "Another Simple Note"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/70.json b/acrate_astreams/tests/activitystreams/examples/70.json
new file mode 100644
index 0000000..4fa61c6
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/70.json
@@ -0,0 +1,10 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally offered a post to John",
+ "type": "Offer",
+ "actor": "http://sally.example.org",
+ "object": "http://example.org/posts/1",
+ "target": "http://john.example.org",
+ "bcc": [ "http://joe.example.org" ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/71.json b/acrate_astreams/tests/activitystreams/examples/71.json
new file mode 100644
index 0000000..c9bae09
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/71.json
@@ -0,0 +1,9 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally offered a post to John",
+ "type": "Offer",
+ "actor": "http://sally.example.org",
+ "object": "http://example.org/posts/1",
+ "target": "http://john.example.org",
+ "bto": [ "http://joe.example.org" ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/72.json b/acrate_astreams/tests/activitystreams/examples/72.json
new file mode 100644
index 0000000..47ab253
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/72.json
@@ -0,0 +1,9 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally offered a post to John",
+ "type": "Offer",
+ "actor": "http://sally.example.org",
+ "object": "http://example.org/posts/1",
+ "target": "http://john.example.org",
+ "cc": [ "http://joe.example.org" ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/73.json b/acrate_astreams/tests/activitystreams/examples/73.json
new file mode 100644
index 0000000..9d6d9ef
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/73.json
@@ -0,0 +1,21 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Activities in context 1",
+ "type": "Collection",
+ "items": [
+ {
+ "type": "Offer",
+ "actor": "http://sally.example.org",
+ "object": "http://example.org/posts/1",
+ "target": "http://john.example.org",
+ "context": "http://example.org/contexts/1"
+ },
+ {
+ "type": "Like",
+ "actor": "http://joe.example.org",
+ "object": "http://example.org/posts/2",
+ "context": "http://example.org/contexts/1"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/74.json b/acrate_astreams/tests/activitystreams/examples/74.json
new file mode 100644
index 0000000..e0cb2e5
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/74.json
@@ -0,0 +1,12 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally's blog posts",
+ "type": "Collection",
+ "totalItems": 3,
+ "current": "http://example.org/collection",
+ "items": [
+ "http://example.org/posts/1",
+ "http://example.org/posts/2",
+ "http://example.org/posts/3"
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/75.json b/acrate_astreams/tests/activitystreams/examples/75.json
new file mode 100644
index 0000000..c1bdefc
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/75.json
@@ -0,0 +1,16 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally's blog posts",
+ "type": "Collection",
+ "totalItems": 3,
+ "current": {
+ "type": "Link",
+ "summary": "Most Recent Items",
+ "href": "http://example.org/collection"
+ },
+ "items": [
+ "http://example.org/posts/1",
+ "http://example.org/posts/2",
+ "http://example.org/posts/3"
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/76.json b/acrate_astreams/tests/activitystreams/examples/76.json
new file mode 100644
index 0000000..c097e32
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/76.json
@@ -0,0 +1,8 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally's blog posts",
+ "type": "Collection",
+ "totalItems": 3,
+ "first": "http://example.org/collection?page=0"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/77.json b/acrate_astreams/tests/activitystreams/examples/77.json
new file mode 100644
index 0000000..242b804
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/77.json
@@ -0,0 +1,12 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally's blog posts",
+ "type": "Collection",
+ "totalItems": 3,
+ "first": {
+ "type": "Link",
+ "summary": "First Page",
+ "href": "http://example.org/collection?page=0"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/78.json b/acrate_astreams/tests/activitystreams/examples/78.json
new file mode 100644
index 0000000..4b3643a
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/78.json
@@ -0,0 +1,10 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "A simple note",
+ "type": "Note",
+ "content": "This is all there is.",
+ "generator": {
+ "type": "Application",
+ "name": "Exampletron 3000"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/79.json b/acrate_astreams/tests/activitystreams/examples/79.json
new file mode 100644
index 0000000..2616ed5
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/79.json
@@ -0,0 +1,13 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "A simple note",
+ "type": "Note",
+ "content": "This is all there is.",
+ "icon": {
+ "type": "Image",
+ "name": "Note icon",
+ "url": "http://example.org/note.png",
+ "width": 16,
+ "height": 16
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/8.json b/acrate_astreams/tests/activitystreams/examples/8.json
new file mode 100644
index 0000000..63c0493
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/8.json
@@ -0,0 +1,17 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Page 1 of Sally's notes",
+ "type": "OrderedCollectionPage",
+ "id": "http://example.org/foo?page=1",
+ "partOf": "http://example.org/foo",
+ "orderedItems": [
+ {
+ "type": "Note",
+ "name": "A Simple Note"
+ },
+ {
+ "type": "Note",
+ "name": "Another Simple Note"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/80.json b/acrate_astreams/tests/activitystreams/examples/80.json
new file mode 100644
index 0000000..1d8c547
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/80.json
@@ -0,0 +1,22 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "A simple note",
+ "type": "Note",
+ "content": "A simple note",
+ "icon": [
+ {
+ "type": "Image",
+ "summary": "Note (16x16)",
+ "url": "http://example.org/note1.png",
+ "width": 16,
+ "height": 16
+ },
+ {
+ "type": "Image",
+ "summary": "Note (32x32)",
+ "url": "http://example.org/note2.png",
+ "width": 32,
+ "height": 32
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/81.json b/acrate_astreams/tests/activitystreams/examples/81.json
new file mode 100644
index 0000000..8ee37a9
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/81.json
@@ -0,0 +1,11 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "name": "A simple note",
+ "type": "Note",
+ "content": "This is all there is.",
+ "image": {
+ "type": "Image",
+ "name": "A Cat",
+ "url": "http://example.org/cat.png"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/82.json b/acrate_astreams/tests/activitystreams/examples/82.json
new file mode 100644
index 0000000..64c5964
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/82.json
@@ -0,0 +1,18 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "name": "A simple note",
+ "type": "Note",
+ "content": "This is all there is.",
+ "image": [
+ {
+ "type": "Image",
+ "name": "Cat 1",
+ "url": "http://example.org/cat1.png"
+ },
+ {
+ "type": "Image",
+ "name": "Cat 2",
+ "url": "http://example.org/cat2.png"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/83.json b/acrate_astreams/tests/activitystreams/examples/83.json
new file mode 100644
index 0000000..98479e3
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/83.json
@@ -0,0 +1,11 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "A simple note",
+ "type": "Note",
+ "content": "This is all there is.",
+ "inReplyTo": {
+ "summary": "Previous note",
+ "type": "Note",
+ "content": "What else is there?"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/84.json b/acrate_astreams/tests/activitystreams/examples/84.json
new file mode 100644
index 0000000..047baee
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/84.json
@@ -0,0 +1,7 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "A simple note",
+ "type": "Note",
+ "content": "This is all there is.",
+ "inReplyTo": "http://example.org/posts/1"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/85.json b/acrate_astreams/tests/activitystreams/examples/85.json
new file mode 100644
index 0000000..20bd223
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/85.json
@@ -0,0 +1,14 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally listened to a piece of music on the Acme Music Service",
+ "type": "Listen",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": "http://example.org/foo.mp3",
+ "instrument": {
+ "type": "Service",
+ "name": "Acme Music Service"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/86.json b/acrate_astreams/tests/activitystreams/examples/86.json
new file mode 100644
index 0000000..411c647
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/86.json
@@ -0,0 +1,8 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "A collection",
+ "type": "Collection",
+ "totalItems": 3,
+ "last": "http://example.org/collection?page=1"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/87.json b/acrate_astreams/tests/activitystreams/examples/87.json
new file mode 100644
index 0000000..3a127a6
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/87.json
@@ -0,0 +1,12 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "A collection",
+ "type": "Collection",
+ "totalItems": 5,
+ "last": {
+ "type": "Link",
+ "summary": "Last Page",
+ "href": "http://example.org/collection?page=1"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/88.json b/acrate_astreams/tests/activitystreams/examples/88.json
new file mode 100644
index 0000000..a812862
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/88.json
@@ -0,0 +1,13 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Person",
+ "name": "Sally",
+ "location": {
+ "name": "Over the Arabian Sea, east of Socotra Island Nature Sanctuary",
+ "type": "Place",
+ "longitude": 12.34,
+ "latitude": 56.78,
+ "altitude": 90,
+ "units": "m"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/89.json b/acrate_astreams/tests/activitystreams/examples/89.json
new file mode 100644
index 0000000..39d430d
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/89.json
@@ -0,0 +1,17 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally's notes",
+ "type": "Collection",
+ "totalItems": 2,
+ "items": [
+ {
+ "type": "Note",
+ "name": "Reminder for Going-Away Party"
+ },
+ {
+ "type": "Note",
+ "name": "Meeting 2016-11-17"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/9.json b/acrate_astreams/tests/activitystreams/examples/9.json
new file mode 100644
index 0000000..a355ad9
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/9.json
@@ -0,0 +1,17 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally accepted an invitation to a party",
+ "type": "Accept",
+ "actor": {
+ "type": "Person",
+ "name": "Sally"
+ },
+ "object": {
+ "type": "Invite",
+ "actor": "http://john.example.org",
+ "object": {
+ "type": "Event",
+ "name": "Going-Away Party for Jim"
+ }
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/90.json b/acrate_astreams/tests/activitystreams/examples/90.json
new file mode 100644
index 0000000..4832173
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/90.json
@@ -0,0 +1,16 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally's notes",
+ "type": "OrderedCollection",
+ "totalItems": 2,
+ "orderedItems": [
+ {
+ "type": "Note",
+ "name": "Meeting 2016-11-17"
+ },
+ {
+ "type": "Note",
+ "name": "Reminder for Going-Away Party"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/91.json b/acrate_astreams/tests/activitystreams/examples/91.json
new file mode 100644
index 0000000..f5446b8
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/91.json
@@ -0,0 +1,16 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Question",
+ "name": "What is the answer?",
+ "oneOf": [
+ {
+ "type": "Note",
+ "name": "Option A"
+ },
+ {
+ "type": "Note",
+ "name": "Option B"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/92.json b/acrate_astreams/tests/activitystreams/examples/92.json
new file mode 100644
index 0000000..c03f2b5
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/92.json
@@ -0,0 +1,15 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Question",
+ "name": "What is the answer?",
+ "anyOf": [
+ {
+ "type": "Note",
+ "name": "Option A"
+ },
+ {
+ "type": "Note",
+ "name": "Option B"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/93.json b/acrate_astreams/tests/activitystreams/examples/93.json
new file mode 100644
index 0000000..794dd0a
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/93.json
@@ -0,0 +1,6 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Question",
+ "name": "What is the answer?",
+ "closed": "2016-05-10T00:00:00Z"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/94.json b/acrate_astreams/tests/activitystreams/examples/94.json
new file mode 100644
index 0000000..5bd37ff
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/94.json
@@ -0,0 +1,15 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally moved a post from List A to List B",
+ "type": "Move",
+ "actor": "http://sally.example.org",
+ "object": "http://example.org/posts/1",
+ "target": {
+ "type": "Collection",
+ "name": "List B"
+ },
+ "origin": {
+ "type": "Collection",
+ "name": "List A"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/95.json b/acrate_astreams/tests/activitystreams/examples/95.json
new file mode 100644
index 0000000..26c5245
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/95.json
@@ -0,0 +1,11 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Page 2 of Sally's blog posts",
+ "type": "CollectionPage",
+ "next": "http://example.org/collection?page=2",
+ "items": [
+ "http://example.org/posts/1",
+ "http://example.org/posts/2",
+ "http://example.org/posts/3"
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/96.json b/acrate_astreams/tests/activitystreams/examples/96.json
new file mode 100644
index 0000000..03069d4
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/96.json
@@ -0,0 +1,15 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Page 2 of Sally's blog posts",
+ "type": "CollectionPage",
+ "next": {
+ "type": "Link",
+ "name": "Next Page",
+ "href": "http://example.org/collection?page=2"
+ },
+ "items": [
+ "http://example.org/posts/1",
+ "http://example.org/posts/2",
+ "http://example.org/posts/3"
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/97.json b/acrate_astreams/tests/activitystreams/examples/97.json
new file mode 100644
index 0000000..60d3f93
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/97.json
@@ -0,0 +1,8 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally liked a post",
+ "type": "Like",
+ "actor": "http://sally.example.org",
+ "object": "http://example.org/posts/1"
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/98.json b/acrate_astreams/tests/activitystreams/examples/98.json
new file mode 100644
index 0000000..7575286
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/98.json
@@ -0,0 +1,10 @@
+
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Like",
+ "actor": "http://sally.example.org",
+ "object": {
+ "type": "Note",
+ "content": "A simple note"
+ }
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/activitystreams/examples/99.json b/acrate_astreams/tests/activitystreams/examples/99.json
new file mode 100644
index 0000000..2ae126f
--- /dev/null
+++ b/acrate_astreams/tests/activitystreams/examples/99.json
@@ -0,0 +1,14 @@
+{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "summary": "Sally liked a note",
+ "type": "Like",
+ "actor": "http://sally.example.org",
+ "object": [
+ "http://example.org/posts/1",
+ {
+ "type": "Note",
+ "summary": "A simple note",
+ "content": "That is a tree."
+ }
+ ]
+}
\ No newline at end of file
diff --git a/acrate_astreams/tests/test_activitystreams.rs b/acrate_astreams/tests/test_activitystreams.rs
new file mode 100644
index 0000000..381dcec
--- /dev/null
+++ b/acrate_astreams/tests/test_activitystreams.rs
@@ -0,0 +1,172 @@
+macro_rules! test_example {
+ ($modname:ident, $filename:literal) => {
+ mod $modname {
+ const DATA: &'static str = include_str!($filename);
+
+ #[test]
+ fn test_example_exists() {
+ assert_ne!(DATA.len(), 0)
+ }
+ }
+ }
+}
+
+test_example!(e001, "./activitystreams/examples/1.json");
+test_example!(e002, "./activitystreams/examples/2.json");
+test_example!(e003, "./activitystreams/examples/3.json");
+test_example!(e004, "./activitystreams/examples/4.json");
+test_example!(e005, "./activitystreams/examples/5.json");
+test_example!(e006, "./activitystreams/examples/6.json");
+test_example!(e007, "./activitystreams/examples/7.json");
+test_example!(e008, "./activitystreams/examples/8.json");
+test_example!(e009, "./activitystreams/examples/9.json");
+test_example!(e010, "./activitystreams/examples/10.json");
+test_example!(e011, "./activitystreams/examples/11.json");
+test_example!(e012, "./activitystreams/examples/12.json");
+test_example!(e013, "./activitystreams/examples/13.json");
+test_example!(e014, "./activitystreams/examples/14.json");
+test_example!(e015, "./activitystreams/examples/15.json");
+test_example!(e016, "./activitystreams/examples/16.json");
+test_example!(e017, "./activitystreams/examples/17.json");
+test_example!(e018, "./activitystreams/examples/18.json");
+test_example!(e019, "./activitystreams/examples/19.json");
+test_example!(e020, "./activitystreams/examples/20.json");
+test_example!(e021, "./activitystreams/examples/21.json");
+test_example!(e022, "./activitystreams/examples/22.json");
+test_example!(e023, "./activitystreams/examples/23.json");
+test_example!(e024, "./activitystreams/examples/24.json");
+test_example!(e025, "./activitystreams/examples/25.json");
+test_example!(e026, "./activitystreams/examples/26.json");
+test_example!(e027, "./activitystreams/examples/27.json");
+test_example!(e028, "./activitystreams/examples/28.json");
+test_example!(e029, "./activitystreams/examples/29.json");
+test_example!(e030, "./activitystreams/examples/30.json");
+test_example!(e031, "./activitystreams/examples/31.json");
+test_example!(e032, "./activitystreams/examples/32.json");
+test_example!(e033, "./activitystreams/examples/33.json");
+test_example!(e034, "./activitystreams/examples/34.json");
+test_example!(e035, "./activitystreams/examples/35.json");
+test_example!(e036, "./activitystreams/examples/36.json");
+test_example!(e037, "./activitystreams/examples/37.json");
+test_example!(e038, "./activitystreams/examples/38.json");
+test_example!(e039, "./activitystreams/examples/39.json");
+test_example!(e040, "./activitystreams/examples/40.json");
+test_example!(e041, "./activitystreams/examples/41.json");
+test_example!(e042, "./activitystreams/examples/42.json");
+test_example!(e043, "./activitystreams/examples/43.json");
+test_example!(e044, "./activitystreams/examples/44.json");
+test_example!(e045, "./activitystreams/examples/45.json");
+test_example!(e046, "./activitystreams/examples/46.json");
+test_example!(e047, "./activitystreams/examples/47.json");
+test_example!(e048, "./activitystreams/examples/48.json");
+test_example!(e049, "./activitystreams/examples/49.json");
+test_example!(e050, "./activitystreams/examples/50.json");
+test_example!(e051, "./activitystreams/examples/51.json");
+test_example!(e052, "./activitystreams/examples/52.json");
+test_example!(e053, "./activitystreams/examples/53.json");
+test_example!(e054, "./activitystreams/examples/54.json");
+test_example!(e055, "./activitystreams/examples/55.json");
+test_example!(e056, "./activitystreams/examples/56.json");
+test_example!(e057, "./activitystreams/examples/57.json");
+test_example!(e058, "./activitystreams/examples/58.json");
+test_example!(e059, "./activitystreams/examples/59.json");
+test_example!(e060, "./activitystreams/examples/60.json");
+test_example!(e061, "./activitystreams/examples/61.json");
+test_example!(e062, "./activitystreams/examples/62.json");
+test_example!(e063, "./activitystreams/examples/63.json");
+test_example!(e064, "./activitystreams/examples/64.json");
+test_example!(e065, "./activitystreams/examples/65.json");
+test_example!(e066, "./activitystreams/examples/66.json");
+test_example!(e067, "./activitystreams/examples/67.json");
+test_example!(e068, "./activitystreams/examples/68.json");
+test_example!(e069, "./activitystreams/examples/69.json");
+test_example!(e070, "./activitystreams/examples/70.json");
+test_example!(e071, "./activitystreams/examples/71.json");
+test_example!(e072, "./activitystreams/examples/72.json");
+test_example!(e073, "./activitystreams/examples/73.json");
+test_example!(e074, "./activitystreams/examples/74.json");
+test_example!(e075, "./activitystreams/examples/75.json");
+test_example!(e076, "./activitystreams/examples/76.json");
+test_example!(e077, "./activitystreams/examples/77.json");
+test_example!(e078, "./activitystreams/examples/78.json");
+test_example!(e079, "./activitystreams/examples/79.json");
+test_example!(e080, "./activitystreams/examples/80.json");
+test_example!(e081, "./activitystreams/examples/81.json");
+test_example!(e082, "./activitystreams/examples/82.json");
+test_example!(e083, "./activitystreams/examples/83.json");
+test_example!(e084, "./activitystreams/examples/84.json");
+test_example!(e085, "./activitystreams/examples/85.json");
+test_example!(e086, "./activitystreams/examples/86.json");
+test_example!(e087, "./activitystreams/examples/87.json");
+test_example!(e088, "./activitystreams/examples/88.json");
+test_example!(e089, "./activitystreams/examples/89.json");
+test_example!(e090, "./activitystreams/examples/90.json");
+test_example!(e091, "./activitystreams/examples/91.json");
+test_example!(e092, "./activitystreams/examples/92.json");
+test_example!(e093, "./activitystreams/examples/93.json");
+test_example!(e094, "./activitystreams/examples/94.json");
+test_example!(e095, "./activitystreams/examples/95.json");
+test_example!(e096, "./activitystreams/examples/96.json");
+test_example!(e097, "./activitystreams/examples/97.json");
+test_example!(e098, "./activitystreams/examples/98.json");
+test_example!(e099, "./activitystreams/examples/99.json");
+test_example!(e100, "./activitystreams/examples/100.json");
+test_example!(e101, "./activitystreams/examples/101.json");
+test_example!(e102, "./activitystreams/examples/102.json");
+test_example!(e103, "./activitystreams/examples/103.json");
+test_example!(e104, "./activitystreams/examples/104.json");
+test_example!(e105, "./activitystreams/examples/105.json");
+test_example!(e106, "./activitystreams/examples/106.json");
+test_example!(e107, "./activitystreams/examples/107.json");
+test_example!(e108, "./activitystreams/examples/108.json");
+test_example!(e109, "./activitystreams/examples/109.json");
+test_example!(e110, "./activitystreams/examples/110.json");
+test_example!(e111, "./activitystreams/examples/111.json");
+test_example!(e112, "./activitystreams/examples/112.json");
+test_example!(e113, "./activitystreams/examples/113.json");
+test_example!(e114, "./activitystreams/examples/114.json");
+test_example!(e115, "./activitystreams/examples/115.json");
+test_example!(e116, "./activitystreams/examples/116.json");
+test_example!(e117, "./activitystreams/examples/117.json");
+test_example!(e118, "./activitystreams/examples/118.json");
+test_example!(e119, "./activitystreams/examples/119.json");
+test_example!(e120, "./activitystreams/examples/120.json");
+test_example!(e121, "./activitystreams/examples/121.json");
+test_example!(e122, "./activitystreams/examples/122.json");
+test_example!(e123, "./activitystreams/examples/123.json");
+test_example!(e124, "./activitystreams/examples/124.json");
+test_example!(e125, "./activitystreams/examples/125.json");
+test_example!(e126, "./activitystreams/examples/126.json");
+test_example!(e127, "./activitystreams/examples/127.json");
+test_example!(e128, "./activitystreams/examples/128.json");
+test_example!(e129, "./activitystreams/examples/129.json");
+test_example!(e130, "./activitystreams/examples/130.json");
+test_example!(e131, "./activitystreams/examples/131.json");
+test_example!(e132, "./activitystreams/examples/132.json");
+test_example!(e133, "./activitystreams/examples/133.json");
+test_example!(e134, "./activitystreams/examples/134.json");
+test_example!(e135, "./activitystreams/examples/135.json");
+test_example!(e136, "./activitystreams/examples/136.json");
+test_example!(e137, "./activitystreams/examples/137.json");
+test_example!(e138, "./activitystreams/examples/138.json");
+test_example!(e139, "./activitystreams/examples/139.json");
+test_example!(e140, "./activitystreams/examples/140.json");
+test_example!(e141, "./activitystreams/examples/141.json");
+test_example!(e142, "./activitystreams/examples/142.json");
+test_example!(e143, "./activitystreams/examples/143.json");
+test_example!(e144, "./activitystreams/examples/144.json");
+test_example!(e145, "./activitystreams/examples/145.json");
+test_example!(e146, "./activitystreams/examples/146.json");
+test_example!(e147, "./activitystreams/examples/147.json");
+test_example!(e148, "./activitystreams/examples/148.json");
+test_example!(e149, "./activitystreams/examples/149.json");
+test_example!(e150, "./activitystreams/examples/150.json");
+test_example!(e151, "./activitystreams/examples/151.json");
+test_example!(e152, "./activitystreams/examples/152.json");
+test_example!(e153, "./activitystreams/examples/153.json");
+test_example!(e154, "./activitystreams/examples/154.json");
+test_example!(e155, "./activitystreams/examples/155.json");
+test_example!(e156, "./activitystreams/examples/156.json");
+test_example!(e157, "./activitystreams/examples/157.json");
+test_example!(e158, "./activitystreams/examples/158.json");
+test_example!(e159, "./activitystreams/examples/159.json");
diff --git a/acrate_database/tests/test_connect.rs b/acrate_database/tests/integration_tests.rs
similarity index 100%
rename from acrate_database/tests/test_connect.rs
rename to acrate_database/tests/integration_tests.rs
diff --git a/acrate_docker/Dockerfile b/acrate_docker/Dockerfile
index 7af2e9e..f7c961a 100644
--- a/acrate_docker/Dockerfile
+++ b/acrate_docker/Dockerfile
@@ -30,3 +30,12 @@ COPY --from=rdserver_build /usr/src/acrate/target/release/acrate_rdserver /usr/l
ENTRYPOINT ["acrate_rdserver"]
HEALTHCHECK CMD ["curl", "http://127.0.0.1/.healthcheck"]
ENV RUST_LOG="warn,acrate_rdserver=info"
+
+FROM base_builder AS apub_inbox_build
+RUN cargo build --release --package=acrate_apub_inbox --bin=acrate_apub_inbox
+
+FROM base_runner AS apub_inbox
+COPY --from=apub_inbox_build /usr/src/acrate/target/release/acrate_apub_inbox /usr/local/bin/acrate_apub_inbox
+ENTRYPOINT ["acrate_apub_inbox"]
+HEALTHCHECK CMD ["curl", "http://127.0.0.1/.healthcheck"]
+ENV RUST_LOG="warn,acrate_apub_inbox=info"
diff --git a/acrate_docker/compose.yml b/acrate_docker/compose.yml
index 02bf4e6..c77f2b1 100644
--- a/acrate_docker/compose.yml
+++ b/acrate_docker/compose.yml
@@ -51,12 +51,6 @@ services:
- type: "volume"
source: "postgres_data"
target: "/var/lib/postgresql/data"
- ports:
- # FIXME: for development purposes only
- - protocol: "tcp"
- host_ip: "127.0.0.1"
- target: 5432
- published: 5432
expose:
- 5432
healthcheck:
@@ -84,7 +78,26 @@ services:
target: "rdserver"
restart: "unless-stopped"
environment:
- ACRATE_WEBFINGER_BIND_ADDRESS: "0.0.0.0:80"
+ ACRATE_RDSERVER_BIND_ADDRESS: "0.0.0.0:80"
+ ACRATE_DATABASE_URL: *database_url
+ expose:
+ - 80
+ depends_on:
+ database:
+ condition: "service_healthy"
+ migrate:
+ condition: "service_completed_successfully"
+
+ # ActivityPub inbox server
+ apub_inbox:
+ build:
+ dockerfile: "./Dockerfile"
+ additional_contexts:
+ - "source=.."
+ target: "apub_inbox"
+ restart: "unless-stopped"
+ environment:
+ ACRATE_APUB_INBOX_BIND_ADDRESS: "0.0.0.0:80"
ACRATE_DATABASE_URL: *database_url
expose:
- 80
diff --git a/acrate_docker/config/caddy/Caddyfile b/acrate_docker/config/caddy/Caddyfile
index 6514746..0d87a18 100644
--- a/acrate_docker/config/caddy/Caddyfile
+++ b/acrate_docker/config/caddy/Caddyfile
@@ -13,4 +13,22 @@
health_uri "/.healthcheck"
health_status "204"
}
+
+ @inbox {
+ path "/inbox"
+ }
+
+ reverse_proxy @inbox {
+ to "http://inbox"
+
+ health_uri "/.healthcheck"
+ health_status "204"
+ }
+}
+
+{
+ admin {
+ origins "127.0.0.1"
+ enforce_origin
+ }
}
diff --git a/acrate_docker/debug.compose.yml b/acrate_docker/debug.compose.yml
new file mode 100644
index 0000000..b201e73
--- /dev/null
+++ b/acrate_docker/debug.compose.yml
@@ -0,0 +1,30 @@
+# Docker Compose file to be merged with compose.yml to expose service ports to localhost for debugging purposes
+
+services:
+ ingress:
+ ports:
+ - protocol: "tcp"
+ host_ip: "127.0.0.1"
+ target: 30000
+ published: 2019
+
+ database:
+ ports:
+ - protocol: "tcp"
+ host_ip: "127.0.0.1"
+ target: 30001
+ published: 5432
+
+ rdserver:
+ ports:
+ - protocol: "tcp"
+ host_ip: "127.0.0.1"
+ target: 30002
+ published: 80
+
+ apub_inbox:
+ ports:
+ - protocol: "tcp"
+ host_ip: "127.0.0.1"
+ target: 30003
+ published: 80
diff --git a/acrate_rdserver/src/config.rs b/acrate_rdserver/src/config.rs
index 786b401..e68acf2 100644
--- a/acrate_rdserver/src/config.rs
+++ b/acrate_rdserver/src/config.rs
@@ -1,3 +1,3 @@
micronfig::config!(
- ACRATE_WEBFINGER_BIND_ADDRESS: String > std::net::SocketAddr,
+ ACRATE_RDSERVER_BIND_ADDRESS: String > std::net::SocketAddr,
);
diff --git a/acrate_rdserver/src/main.rs b/acrate_rdserver/src/main.rs
index f926ac2..2d1bdca 100644
--- a/acrate_rdserver/src/main.rs
+++ b/acrate_rdserver/src/main.rs
@@ -7,7 +7,7 @@ mod route;
#[tokio::main]
async fn main() {
web_server!(
- on: *config::ACRATE_WEBFINGER_BIND_ADDRESS(),
+ on: *config::ACRATE_RDSERVER_BIND_ADDRESS(),
templates: [
"rd.html.j2"
],
diff --git a/acrate_utils/src/lib.rs b/acrate_utils/src/lib.rs
index 1187539..392fa0a 100644
--- a/acrate_utils/src/lib.rs
+++ b/acrate_utils/src/lib.rs
@@ -7,10 +7,10 @@ pub mod run;
#[macro_export]
macro_rules! add_minijinja_template {
($mj:ident, $path:literal) => {
- log::trace!("Adding template to minijinja Environment: {:?} ← {:#?}", $mj, $path);
+ log::trace!("Adding template to minijinja Environment: {:#?}", $path);
$mj.add_template($path, include_str!($path))
.expect(concat!("Invalid Minijinja template: ", $path));
- log::trace!("Added template to minijinja Environment: {:?} ← {:#?}", $mj, $path);
+ log::trace!("Added template to minijinja Environment: {:#?}", $path);
};
}
@@ -18,9 +18,9 @@ macro_rules! add_minijinja_template {
#[macro_export]
macro_rules! add_axum_route {
($router:ident, $path:literal, $route:expr) => {
- log::trace!("Adding route to axum Router: {:?} ← {:#?}", $router, $path);
+ log::trace!("Adding route to axum Router: {:#?}", $path);
let $router = $router.route($path, $route);
- log::trace!("Added route to axum Router: {:?} ← {:#?}", $router, $path);
+ log::trace!("Added route to axum Router: {:#?}", $path);
};
}
@@ -29,10 +29,10 @@ macro_rules! web_server {
(
on: $socket_addr:expr,
templates: [
- $( $template_path:literal ),+
+ $( $template_path:literal ),*
],
routes: {
- $( $path:literal => $route:expr ),+
+ $( $path:literal => $route:expr ),*
}
) => {
$crate::init::init_logging();
@@ -40,11 +40,11 @@ macro_rules! web_server {
let mut mj = $crate::init::init_minijinja();
$(
$crate::add_minijinja_template!(mj, $template_path);
- )+
+ )*
let router = $crate::init::init_router(mj);
$(
$crate::add_axum_route!(router, $path, $route);
- )+
+ )*
$crate::run::run_server(listener, router).await
};
}