robespierre_http/
groups.rs

1use robespierre_models::{
2    channels::Channel,
3    id::{ChannelId, UserId},
4    users::User,
5};
6
7use super::impl_prelude::*;
8
9impl Http {
10    /// Creates a group
11    pub async fn create_group(
12        &self,
13        name: String,
14        description: Option<String>,
15        nonce: String,
16        users: Option<&[UserId]>,
17        nsfw: Option<bool>,
18    ) -> Result<Channel> {
19        #[derive(serde::Serialize)]
20        struct CreateGroupRequest<'a> {
21            name: String,
22            #[serde(skip_serializing_if = "Option::is_none")]
23            description: Option<String>,
24            nonce: String,
25            #[serde(skip_serializing_if = "Option::is_none")]
26            users: Option<&'a [UserId]>,
27            #[serde(skip_serializing_if = "Option::is_none")]
28            nsfw: Option<bool>,
29        }
30        Ok(self
31            .client
32            .post(ep!(self, "/channels/create"))
33            .json(&CreateGroupRequest {
34                name,
35                description,
36                nonce,
37                users,
38                nsfw,
39            })
40            .send()
41            .await?
42            .error_for_status()?
43            .json()
44            .await?)
45    }
46
47    /// Fetches group members
48    pub async fn fetch_group_members(&self, group: ChannelId) -> Result<Vec<User>> {
49        Ok(self
50            .client
51            .get(ep!(self, "/channels/{}/members" group))
52            .send()
53            .await?
54            .error_for_status()?
55            .json()
56            .await?)
57    }
58
59    // TODO: add member to group
60    // TODO: remove member from group
61}