diff --git a/src/database/entities/channel.rs b/src/database/entities/channel.rs index f3029660..a1ba6c4a 100644 --- a/src/database/entities/channel.rs +++ b/src/database/entities/channel.rs @@ -57,7 +57,10 @@ pub enum Channel { #[serde(skip_serializing_if = "Option::is_none")] permissions: Option, - }, + + #[serde(skip_serializing_if = "entities::server::if_false", default)] + nsfw: bool + }, TextChannel { #[serde(rename = "_id")] id: String, @@ -77,7 +80,10 @@ pub enum Channel { #[serde(skip_serializing_if = "Option::is_none")] default_permissions: Option, #[serde(default = "HashMap::new", skip_serializing_if = "HashMap::is_empty")] - role_permissions: HashMap + role_permissions: HashMap, + + #[serde(skip_serializing_if = "entities::server::if_false", default)] + nsfw: bool }, VoiceChannel { #[serde(rename = "_id")] @@ -95,7 +101,10 @@ pub enum Channel { #[serde(skip_serializing_if = "Option::is_none")] default_permissions: Option, #[serde(default = "HashMap::new", skip_serializing_if = "HashMap::is_empty")] - role_permissions: HashMap + role_permissions: HashMap, + + #[serde(skip_serializing_if = "entities::server::if_false", default)] + nsfw: bool }, } diff --git a/src/database/entities/server.rs b/src/database/entities/server.rs index 6f050ad1..14cb3945 100644 --- a/src/database/entities/server.rs +++ b/src/database/entities/server.rs @@ -37,8 +37,8 @@ pub type PermissionTuple = ( i32 // channel permission ); -fn if_false(t: &bool) -> bool { - *t == false +pub fn if_false(t: &bool) -> bool { + !t } #[derive(Serialize, Deserialize, Debug, Clone)] @@ -107,6 +107,9 @@ pub struct Server { pub icon: Option, #[serde(skip_serializing_if = "Option::is_none")] pub banner: Option, + + #[serde(skip_serializing_if = "if_false", default)] + pub nsfw: bool } impl Server { diff --git a/src/routes/channels/channel_edit.rs b/src/routes/channels/channel_edit.rs index f48e2643..d9879932 100644 --- a/src/routes/channels/channel_edit.rs +++ b/src/routes/channels/channel_edit.rs @@ -18,6 +18,8 @@ pub struct Data { #[validate(length(min = 1, max = 128))] icon: Option, remove: Option, + #[serde(skip_serializing_if = "Option::is_none")] + nsfw: Option } #[patch("/", data = "")] @@ -86,6 +88,10 @@ pub async fn req(user: User, target: Ref, data: Json) -> Result 0 { operations.insert("$set", &set); diff --git a/src/routes/channels/group_create.rs b/src/routes/channels/group_create.rs index 80bf372a..7d0ce530 100644 --- a/src/routes/channels/group_create.rs +++ b/src/routes/channels/group_create.rs @@ -20,6 +20,8 @@ pub struct Data { #[validate(length(min = 1, max = 36))] nonce: String, users: Vec, + #[serde(skip_serializing_if = "Option::is_none")] + nsfw: Option } #[post("/create", data = "")] @@ -77,7 +79,8 @@ pub async fn req(user: User, info: Json) -> Result { recipients: set.into_iter().collect::>(), icon: None, last_message: None, - permissions: None + permissions: None, + nsfw: info.nsfw.unwrap_or_default() }; channel.clone().publish().await?; diff --git a/src/routes/servers/channel_create.rs b/src/routes/servers/channel_create.rs index ce472726..12520ed5 100644 --- a/src/routes/servers/channel_create.rs +++ b/src/routes/servers/channel_create.rs @@ -32,6 +32,8 @@ pub struct Data { // Maximum length of 36 allows both ULIDs and UUIDs. #[validate(length(min = 1, max = 36))] nonce: String, + #[serde(skip_serializing_if = "Option::is_none")] + nsfw: Option, } #[post("//channels", data = "")] @@ -80,7 +82,9 @@ pub async fn req(user: User, target: Ref, info: Json) -> Result { last_message: None, default_permissions: None, - role_permissions: HashMap::new() + role_permissions: HashMap::new(), + + nsfw: info.nsfw.unwrap_or_default(), }, ChannelType::Voice => Channel::VoiceChannel { id: id.clone(), @@ -92,7 +96,9 @@ pub async fn req(user: User, target: Ref, info: Json) -> Result { icon: None, default_permissions: None, - role_permissions: HashMap::new() + role_permissions: HashMap::new(), + + nsfw: info.nsfw.unwrap_or_default() } }; diff --git a/src/routes/servers/server_create.rs b/src/routes/servers/server_create.rs index 8d8d6736..88c664ae 100644 --- a/src/routes/servers/server_create.rs +++ b/src/routes/servers/server_create.rs @@ -18,6 +18,8 @@ pub struct Data { // Maximum length of 36 allows both ULIDs and UUIDs. #[validate(length(min = 1, max = 36))] nonce: String, + #[serde(skip_serializing_if = "Option::is_none")] + nsfw: Option } #[post("/create", data = "")] @@ -75,6 +77,7 @@ pub async fn req(user: User, info: Json) -> Result { icon: None, banner: None, + nsfw: info.nsfw.unwrap_or_default() }; Channel::TextChannel { @@ -88,7 +91,8 @@ pub async fn req(user: User, info: Json) -> Result { last_message: None, default_permissions: None, - role_permissions: HashMap::new() + role_permissions: HashMap::new(), + nsfw: false } .publish() .await?; diff --git a/src/routes/servers/server_edit.rs b/src/routes/servers/server_edit.rs index d7cc17d6..14d182f9 100644 --- a/src/routes/servers/server_edit.rs +++ b/src/routes/servers/server_edit.rs @@ -18,6 +18,8 @@ pub struct Data { categories: Option>, system_messages: Option, remove: Option, + #[serde(skip_serializing_if = "Option::is_none")] + nsfw: Option } #[patch("/", data = "")] @@ -105,6 +107,10 @@ pub async fn req(user: User, target: Ref, data: Json) -> Result 0 { operations.insert("$set", &set);