This commit is contained in:
asonix 2020-07-25 17:11:42 -05:00
parent 4c72ace1ce
commit 5701eb78bd
3 changed files with 78 additions and 35 deletions

View file

@ -1,27 +1,30 @@
use activitystreams::{
ext::Ext,
object::{properties::ApObjectProperties, Video},
context,
object::{ApObject, Video},
prelude::*,
uri,
};
use chrono::Duration;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut v = Video::full();
fn main() -> Result<(), anyhow::Error> {
let mut video = ApObject::new(Video::new());
v.as_mut()
.set_context_xsd_any_uri("https://www.w3.org/ns/activitystreams")?
.set_id("https://example.com/@example/lions")?
.set_url_xsd_any_uri("https://example.com/@example/lions/video.webm")?
.set_name_xsd_string("My Cool Video")?
.set_summary_xsd_string("A video about some cool lions")?
.set_media_type("video/webm")?
.set_duration("PT4M20S")?;
video
.set_context(context())
.set_id(uri!("https://example.com/@example/lions"))
.set_media_type("video/webm".parse()?)
.set_url(uri!("https://example.com/@example/lions/video.webm"))
.set_summary("A cool video".to_owned())
.set_duration(Duration::minutes(4) + Duration::seconds(20))
.set_shares(uri!("https://example.com/@example/lions/video.webm#shares"));
println!("Video, {:#?}", v);
println!("Video, {:#?}", video);
let s = serde_json::to_string(&v)?;
let s = serde_json::to_string(&video)?;
println!("json, {}", s);
let v: Ext<Video, ApObjectProperties> = serde_json::from_str(&s)?;
let v: ApObject<Video> = serde_json::from_str(&s)?;
println!("Video again, {:#?}", v);

View file

@ -1,7 +1,7 @@
use activitystreams::{
collection::{properties::CollectionProperties, OrderedCollection},
ext::Ext,
object::{properties::ApObjectProperties, ObjectBox, Page},
collection::OrderedCollection,
object::{ApObject, Page},
prelude::*,
};
use anyhow::Error;
@ -41,28 +41,28 @@ fn main() -> Result<(), Error> {
"published": "2020-03-13T00:14:41.188634+00:00"
}"#;
let page: Ext<Page, ApObjectProperties> = serde_json::from_str(page_json)?;
let page: ApObject<Page> = serde_json::from_str(page_json)?;
println!("{:#?}", page);
let obox = ObjectBox::from_concrete(page)?;
println!("{:#?}", obox);
let obox_string = serde_json::to_string(&obox)?;
println!("{}", obox_string);
let obox: ObjectBox = serde_json::from_str(&obox_string)?;
println!("{:#?}", obox);
let mut collection: OrderedCollection = serde_json::from_str(collection_json)?;
let mut collection: ApObject<OrderedCollection> = serde_json::from_str(collection_json)?;
println!("{:#?}", collection);
let cprops: &CollectionProperties = collection.as_ref();
let v: Vec<Ext<Page, ApObjectProperties>> = cprops
.get_many_items_base_boxes()
.unwrap()
.map(|base_box| base_box.clone().into_concrete())
.collect::<Result<Vec<_>, std::io::Error>>()?;
let cprops: &mut CollectionProperties = collection.as_mut();
cprops.set_many_items_base_boxes(v.clone())?;
let v: Vec<ApObject<Page>> = collection
.items()
.clone()
.many()
.into_iter()
.flatten()
.filter_map(|any_base| any_base.take_base())
.map(|base| base.solidify().and_then(|o| o.extend()))
.collect::<Result<Vec<_>, _>>()?;
println!("{:#?}", v);
let v = v
.into_iter()
.map(|o| o.into_any_base())
.collect::<Result<Vec<_>, _>>()?;
collection.set_many_items(v);
Ok(())
}

View file

@ -0,0 +1,40 @@
use activitystreams::{activity::ActorAndObject, prelude::*};
#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
pub enum AcceptedTypes {
Accept,
Announce,
Create,
Delete,
Follow,
Reject,
Update,
Undo,
}
pub type AcceptedActivity = ActorAndObject<AcceptedTypes>;
pub fn handle_activity(activity: AcceptedActivity) -> Result<(), anyhow::Error> {
println!("Actor: {:?}", activity.actor());
println!("Object: {:?}", activity.object());
match activity.kind() {
Some(AcceptedTypes::Accept) => println!("Accept"),
Some(AcceptedTypes::Announce) => println!("Announce"),
Some(AcceptedTypes::Create) => println!("Create"),
Some(AcceptedTypes::Delete) => println!("Delete"),
Some(AcceptedTypes::Follow) => println!("Follow"),
Some(AcceptedTypes::Reject) => println!("Reject"),
Some(AcceptedTypes::Update) => println!("Update"),
Some(AcceptedTypes::Undo) => println!("Undo"),
None => return Err(anyhow::Error::msg("No activity type provided")),
}
Ok(())
}
static EXAMPLE_JSON: &str = r#"{"actor":"https://asonix.dog/users/asonix","object":"https://asonix.dog/users/asonix/posts/1","type":"Announce"}"#;
fn main() -> Result<(), anyhow::Error> {
handle_activity(serde_json::from_str(EXAMPLE_JSON)?)
}