diff options
-rw-r--r-- | src/stream/activity.rs | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/stream/activity.rs b/src/stream/activity.rs index 6020558..c247477 100644 --- a/src/stream/activity.rs +++ b/src/stream/activity.rs @@ -29,6 +29,11 @@ pub enum ActivityEncoding { } #[derive(Debug, Deserialize, PartialEq)] +pub enum ObjectType { + Note, +} + +#[derive(Debug, Deserialize, PartialEq)] #[serde(rename_all="snake_case")] pub enum ActivityFlag { Direct, @@ -63,6 +68,7 @@ pub struct Activity { pub commented: DateTime, pub verb: Verb, + pub object_type: ObjectType, pub title: String, pub summary: String, @@ -78,7 +84,17 @@ pub struct Activity { impl Activity { pub fn is_post(&self) -> bool { - self.verb == Verb::Post + self.verb == Verb::Create + && self.object_type == ObjectType::Note + && self.has_flag(ActivityFlag::ThreadParent) + } + + pub fn has_flag(&self, flag: ActivityFlag) -> bool { + self.flags + .as_ref() + .map_or( + false, + |flags| flags.iter().find( |f| *f == &flag ).is_some()) } } @@ -181,6 +197,9 @@ mod test { assert_eq!("2023-12-12 17:00:42", &item.edited.to_string()); assert_eq!("0000-00-00 00:00:00", &item.expires.to_string()); assert_eq!("2023-12-19 09:01:15", &item.commented.to_string()); - assert_eq!(ActivityFlag::ThreadParent, item.flags.as_ref().unwrap()[0]); + assert_eq!(ObjectType::Note, item.object_type); + + assert_eq!(true, item.has_flag(ActivityFlag::ThreadParent)); + assert_eq!(true, item.is_post()); } } |