Skip to main content

activityrust/entities/
actortypes.rs

1use crate::entities::activity::ActivityStreamActivity;
2use crate::entities::collection::ActivityStreamCollection;
3use crate::entities::entity::{
4    ActivityStreamEntity, ActivityStreamEntityType, BoxedActivityStreamEntity,
5};
6use serde::{Deserialize, Serialize};
7
8use crate::content::*;
9use crate::traits::properties::*;
10use crate::MaybeOptional;
11use ambassador::Delegate;
12use chrono::{DateTime, FixedOffset};
13use url::Url;
14
15impl ActivityStreamActorProperties for ActivityStreamActor_ {
16    fn get_inbox(&self) -> &Option<ActivityStreamLinkableOrderedCollection> {
17        &self.inbox
18    }
19
20    fn set_inbox<S, T: MaybeOptional<S>>(&mut self, inbox: T)
21    where
22        ActivityStreamLinkableOrderedCollection: From<S>,
23    {
24        if let Some(inbox) = inbox.get_optional() {
25            self.inbox = Some(ActivityStreamLinkableOrderedCollection::from(inbox));
26        }
27    }
28
29    fn get_outbox(&self) -> &Option<ActivityStreamLinkableOrderedCollection> {
30        &self.outbox
31    }
32
33    fn set_outbox<S, T: MaybeOptional<S>>(&mut self, outbox: T)
34    where
35        ActivityStreamLinkableOrderedCollection: From<S>,
36    {
37        if let Some(outbox) = outbox.get_optional() {
38            self.outbox = Some(ActivityStreamLinkableOrderedCollection::from(outbox));
39        }
40    }
41
42    fn get_following(&self) -> &Option<ActivityStreamLinkableCollection> {
43        &self.following
44    }
45
46    fn set_following<S, T: MaybeOptional<S>>(&mut self, following: T)
47    where
48        ActivityStreamLinkableCollection: From<S>,
49    {
50        if let Some(following) = following.get_optional() {
51            self.following = Some(ActivityStreamLinkableCollection::from(following));
52        }
53    }
54
55    fn get_followers(&self) -> &Option<ActivityStreamLinkableCollection> {
56        &self.followers
57    }
58
59    fn set_followers<S, T: MaybeOptional<S>>(&mut self, followers: T)
60    where
61        ActivityStreamLinkableCollection: From<S>,
62    {
63        if let Some(followers) = followers.get_optional() {
64            self.followers = Some(ActivityStreamLinkableCollection::from(followers));
65        }
66    }
67
68    fn get_liked(&self) -> &Option<ActivityStreamLinkableCollection> {
69        &self.liked
70    }
71
72    fn set_liked<S, T: MaybeOptional<S>>(&mut self, liked: T)
73    where
74        ActivityStreamLinkableCollection: From<S>,
75    {
76        if let Some(liked) = liked.get_optional() {
77            self.liked = Some(ActivityStreamLinkableCollection::from(liked));
78        }
79    }
80
81    fn get_preferred_username(&self) -> &Option<String> {
82        &self.preferredUsername
83    }
84
85    fn set_preferred_username<T: MaybeOptional<String>>(&mut self, preferred_username: T) {
86        self.preferredUsername = preferred_username.get_optional();
87    }
88
89    fn get_streams(&self) -> &Option<Vec<ActivityStreamCollection>> {
90        &self.streams
91    }
92    fn set_streams<T: MaybeOptional<Vec<ActivityStreamCollection>>>(&mut self, streams: T) {
93        self.streams = streams.get_optional();
94    }
95    fn add_stream(&mut self, stream: ActivityStreamCollection) {
96        if let Some(ref mut streams) = &mut self.streams {
97            streams.push(stream);
98        }
99    }
100}
101
102//// Type for the Actor data
103#[allow(non_snake_case)]
104#[derive(Debug, Default, Serialize, Deserialize, PartialEq)]
105struct ActivityStreamActor_ {
106    #[serde(skip_serializing_if = "Option::is_none", default)]
107    inbox: Option<ActivityStreamLinkableOrderedCollection>,
108    #[serde(skip_serializing_if = "Option::is_none", default)]
109    outbox: Option<ActivityStreamLinkableOrderedCollection>,
110    #[serde(skip_serializing_if = "Option::is_none", default)]
111    following: Option<ActivityStreamLinkableCollection>,
112    #[serde(skip_serializing_if = "Option::is_none", default)]
113    followers: Option<ActivityStreamLinkableCollection>,
114    #[serde(skip_serializing_if = "Option::is_none", default)]
115    liked: Option<ActivityStreamLinkableCollection>,
116    #[serde(skip_serializing_if = "Option::is_none", default)]
117    streams: Option<Vec<ActivityStreamCollection>>, //FIXME: Implement getter setters
118    #[serde(skip_serializing_if = "Option::is_none", default)]
119    preferredUsername: Option<String>,
120}
121
122generate_basics!(
123    ActivityStreamApplication,
124    ActivityStreamEntityType::Application
125);
126
127#[derive(Debug, Default, Delegate, Serialize, Deserialize, PartialEq)]
128#[delegate(ActivityStreamActivityProperties, target = "_base")]
129#[delegate(ActivityStreamObjectProperties, target = "_base")]
130#[delegate(ActivityStreamActorProperties, target = "_actorbase")]
131pub struct ActivityStreamApplication {
132    #[serde(skip_serializing_if = "Option::is_none", default)]
133    #[serde(deserialize_with = "ActivityStreamApplication::deserialize_type")]
134    r#type: Option<ActivityStreamEntityType>,
135    #[serde(flatten)]
136    _base: ActivityStreamActivity,
137    #[serde(flatten)]
138    _actorbase: ActivityStreamActor_,
139}
140
141generate_basics!(ActivityStreamGroup, ActivityStreamEntityType::Group);
142
143#[derive(Debug, Default, Delegate, Serialize, Deserialize, PartialEq)]
144#[delegate(ActivityStreamActivityProperties, target = "_base")]
145#[delegate(ActivityStreamObjectProperties, target = "_base")]
146#[delegate(ActivityStreamActorProperties, target = "_actorbase")]
147pub struct ActivityStreamGroup {
148    #[serde(skip_serializing_if = "Option::is_none", default)]
149    #[serde(deserialize_with = "ActivityStreamGroup::deserialize_type")]
150    r#type: Option<ActivityStreamEntityType>,
151    #[serde(flatten)]
152    _base: ActivityStreamActivity,
153    #[serde(flatten)]
154    _actorbase: ActivityStreamActor_,
155}
156
157generate_basics!(
158    ActivityStreamOrganization,
159    ActivityStreamEntityType::Organization
160);
161
162#[derive(Debug, Default, Delegate, Serialize, Deserialize, PartialEq)]
163#[delegate(ActivityStreamActivityProperties, target = "_base")]
164#[delegate(ActivityStreamObjectProperties, target = "_base")]
165#[delegate(ActivityStreamActorProperties, target = "_actorbase")]
166pub struct ActivityStreamOrganization {
167    #[serde(skip_serializing_if = "Option::is_none", default)]
168    #[serde(deserialize_with = "ActivityStreamOrganization::deserialize_type")]
169    r#type: Option<ActivityStreamEntityType>,
170    #[serde(flatten)]
171    _base: ActivityStreamActivity,
172    #[serde(flatten)]
173    _actorbase: ActivityStreamActor_,
174}
175
176generate_basics!(ActivityStreamPerson, ActivityStreamEntityType::Person);
177
178#[derive(Debug, Default, Delegate, Serialize, Deserialize, PartialEq)]
179#[delegate(ActivityStreamActivityProperties, target = "_base")]
180#[delegate(ActivityStreamObjectProperties, target = "_base")]
181#[delegate(ActivityStreamActorProperties, target = "_actorbase")]
182pub struct ActivityStreamPerson {
183    #[serde(skip_serializing_if = "Option::is_none", default)]
184    #[serde(deserialize_with = "ActivityStreamPerson::deserialize_type")]
185    r#type: Option<ActivityStreamEntityType>,
186    #[serde(flatten)]
187    _base: ActivityStreamActivity,
188    #[serde(flatten)]
189    _actorbase: ActivityStreamActor_,
190}
191
192generate_basics!(ActivityStreamService, ActivityStreamEntityType::Service);
193
194#[derive(Debug, Default, Delegate, Serialize, Deserialize, PartialEq)]
195#[delegate(ActivityStreamActivityProperties, target = "_base")]
196#[delegate(ActivityStreamObjectProperties, target = "_base")]
197#[delegate(ActivityStreamActorProperties, target = "_actorbase")]
198pub struct ActivityStreamService {
199    #[serde(skip_serializing_if = "Option::is_none", default)]
200    #[serde(deserialize_with = "ActivityStreamService::deserialize_type")]
201    r#type: Option<ActivityStreamEntityType>,
202    #[serde(flatten)]
203    _base: ActivityStreamActivity,
204    #[serde(flatten)]
205    _actorbase: ActivityStreamActor_,
206}