use activitypub::{activity::Create, Error as ApError, Object}; use activity_pub::Id; #[derive(Fail, Debug)] pub enum InboxError { #[fail(display = "The `type` property is required, but was not present")] NoType, #[fail(display = "Invalid activity type")] InvalidType, #[fail(display = "Couldn't undo activity")] CantUndo, } pub trait FromActivity: Sized { type Error: From; fn from_activity(conn: &C, obj: T, actor: Id) -> Result; fn try_from_activity(conn: &C, act: Create) -> Result { Self::from_activity( conn, act.create_props.object_object()?, act.create_props.actor_link::()?, ) } } pub trait Notify { type Error; fn notify(&self, conn: &C) -> Result<(), Self::Error>; } pub trait Deletable { type Error; fn delete(&self, conn: &C) -> Result; fn delete_id(id: &str, actor_id: &str, conn: &C) -> Result; } pub trait WithInbox { fn get_inbox_url(&self) -> String; fn get_shared_inbox_url(&self) -> Option; fn is_local(&self) -> bool; }