diff options
Diffstat (limited to 'server/src/apub/extensions/group_extensions.rs')
-rw-r--r-- | server/src/apub/extensions/group_extensions.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/server/src/apub/extensions/group_extensions.rs b/server/src/apub/extensions/group_extensions.rs new file mode 100644 index 00000000..ece97706 --- /dev/null +++ b/server/src/apub/extensions/group_extensions.rs @@ -0,0 +1,40 @@ +use crate::db::{category::Category, Crud}; +use activitystreams::{ext::Extension, Actor}; +use diesel::PgConnection; +use failure::Error; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GroupExtension { + pub category: GroupCategory, + pub sensitive: bool, +} + +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GroupCategory { + // Using a string because that's how Peertube does it. + pub identifier: String, + pub name: String, +} + +impl GroupExtension { + pub fn new( + conn: &PgConnection, + category_id: i32, + sensitive: bool, + ) -> Result<GroupExtension, Error> { + let category = Category::read(conn, category_id)?; + let group_category = GroupCategory { + identifier: category_id.to_string(), + name: category.name, + }; + Ok(GroupExtension { + category: group_category, + sensitive, + }) + } +} + +impl<T> Extension<T> for GroupExtension where T: Actor {} |