Skip to main content

activityrust/entities/
activity.rs

1use crate::content::*;
2use crate::entities::collection::ActivityStreamCollection;
3use crate::entities::entity::{
4    ActivityStreamEntity, ActivityStreamEntityType, BoxedActivityStreamEntity,
5};
6use crate::entities::object::ActivityStreamObject;
7use crate::traits::properties::*;
8use crate::MaybeOptional;
9use ambassador::Delegate;
10use chrono::{DateTime, FixedOffset};
11use serde::{Deserialize, Serialize};
12use url::Url;
13
14impl ActivityStreamActivityProperties for ActivityStreamActivity {
15    fn get_actor(&self) -> &Option<BoxedActivityStreamEntity> {
16        &self.actor
17    }
18
19    fn set_actor<S, T: MaybeOptional<S>>(&mut self, actor: T)
20    where
21        ActivityStreamEntity: From<S>,
22    {
23        if let Some(actor) = actor.get_optional() {
24            self.actor = Some(Box::new(ActivityStreamEntity::from(actor)));
25        }
26    }
27
28    fn get_object(&self) -> &Option<BoxedActivityStreamEntity> {
29        &self.object
30    }
31
32    fn set_object<S, T: MaybeOptional<S>>(&mut self, object: T)
33    where
34        ActivityStreamEntity: From<S>,
35    {
36        if let Some(object) = object.get_optional() {
37            self.object = Some(Box::new(ActivityStreamEntity::from(object)));
38        }
39    }
40
41    fn get_targets(&self) -> &Option<Vec<ActivityStreamEntity>> {
42        &self.target
43    }
44
45    fn set_targets<S, T: MaybeOptional<Vec<S>>>(&mut self, targets: T)
46    where
47        ActivityStreamEntity: From<S>,
48    {
49        if let Some(targets) = targets.get_optional() {
50            let targets: Vec<ActivityStreamEntity> = targets
51                .into_iter()
52                .map(ActivityStreamEntity::from)
53                .collect();
54            self.target = Some(targets);
55        }
56    }
57
58    fn add_target<S, T: MaybeOptional<S>>(&mut self, target: T)
59    where
60        ActivityStreamEntity: From<S>,
61    {
62        if let Some(target) = target.get_optional() {
63            if self.target.is_none() {
64                self.target = Some(Vec::new());
65            }
66
67            if let Some(ref mut target_internal) = self.target {
68                target_internal.push(ActivityStreamEntity::from(target));
69            }
70        }
71    }
72
73    fn get_result(&self) -> &Option<BoxedActivityStreamEntity> {
74        &self.result
75    }
76
77    fn set_result<S, T: MaybeOptional<S>>(&mut self, result: T)
78    where
79        ActivityStreamEntity: From<S>,
80    {
81        if let Some(result) = result.get_optional() {
82            self.result = Some(Box::new(ActivityStreamEntity::from(result)));
83        }
84    }
85
86    fn get_origin(&self) -> &Option<BoxedActivityStreamEntity> {
87        &self.origin
88    }
89
90    fn set_origin<S, T: MaybeOptional<S>>(&mut self, origin: T)
91    where
92        ActivityStreamEntity: From<S>,
93    {
94        if let Some(origin) = origin.get_optional() {
95            self.origin = Some(Box::new(ActivityStreamEntity::from(origin)));
96        }
97    }
98
99    fn get_instrument(&self) -> &Option<BoxedActivityStreamEntity> {
100        &self.instrument
101    }
102
103    fn set_instrument<S, T: MaybeOptional<S>>(&mut self, instrument: T)
104    where
105        ActivityStreamEntity: From<S>,
106    {
107        if let Some(instrument) = instrument.get_optional() {
108            self.instrument = Some(Box::new(ActivityStreamEntity::from(instrument)));
109        }
110    }
111}
112
113generate_basics!(ActivityStreamActivity, ActivityStreamEntityType::Activity);
114
115#[allow(non_snake_case)]
116#[derive(Debug, Default, Delegate, Serialize, Deserialize, PartialEq)]
117#[delegate(ActivityStreamObjectProperties, target = "_base")]
118pub struct ActivityStreamActivity {
119    #[serde(skip_serializing_if = "Option::is_none", default)]
120    #[serde(deserialize_with = "ActivityStreamActivity::deserialize_type")]
121    r#type: Option<ActivityStreamEntityType>,
122    #[serde(flatten)]
123    _base: ActivityStreamObject,
124    #[serde(skip_serializing_if = "Option::is_none", default)]
125    actor: Option<BoxedActivityStreamEntity>,
126    #[serde(skip_serializing_if = "Option::is_none", default)]
127    object: Option<BoxedActivityStreamEntity>,
128    #[serde(
129        skip_serializing_if = "Option::is_none",
130        default,
131        with = "crate::traits::vecserializer"
132    )]
133    target: Option<Vec<ActivityStreamEntity>>,
134    #[serde(skip_serializing_if = "Option::is_none", default)]
135    result: Option<BoxedActivityStreamEntity>,
136    #[serde(skip_serializing_if = "Option::is_none", default)]
137    origin: Option<BoxedActivityStreamEntity>,
138    #[serde(skip_serializing_if = "Option::is_none", default)]
139    instrument: Option<BoxedActivityStreamEntity>,
140}