summaryrefslogtreecommitdiffstats
path: root/server/src/apub/extensions/group_extensions.rs
blob: 1c24eef57e67265bd182b836b074553fc3204581 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
use crate::{
  db::{category::Category, Crud},
  LemmyError,
};
use activitystreams::{ext::Extension, Actor};
use diesel::PgConnection;
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, LemmyError> {
    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 {}