activityrust/entities/
activity.rs1use 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}