Skip to main content

async_openai/admin/
group_users.rs

1use crate::{
2    config::Config,
3    error::OpenAIError,
4    types::admin::groups::{
5        CreateGroupUserBody, GroupMemberUser, GroupUserAssignment, GroupUserDeletedResource,
6        UserListResource,
7    },
8    Client, RequestOptions,
9};
10
11/// Manage users within a group, including adding and removing users.
12pub struct GroupUsers<'c, C: Config> {
13    client: &'c Client<C>,
14    pub group_id: String,
15    pub(crate) request_options: RequestOptions,
16}
17
18impl<'c, C: Config> GroupUsers<'c, C> {
19    pub fn new(client: &'c Client<C>, group_id: &str) -> Self {
20        Self {
21            client,
22            group_id: group_id.into(),
23            request_options: RequestOptions::new(),
24        }
25    }
26
27    /// Lists all users in a group.
28    #[crate::byot(R = serde::de::DeserializeOwned)]
29    pub async fn list(&self) -> Result<UserListResource, OpenAIError> {
30        self.client
31            .get(
32                format!("/organization/groups/{}/users", self.group_id).as_str(),
33                &self.request_options,
34            )
35            .await
36    }
37
38    /// Adds a user to a group.
39    #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
40    pub async fn add(
41        &self,
42        request: CreateGroupUserBody,
43    ) -> Result<GroupUserAssignment, OpenAIError> {
44        self.client
45            .post(
46                format!("/organization/groups/{}/users", self.group_id).as_str(),
47                request,
48                &self.request_options,
49            )
50            .await
51    }
52
53    /// Removes a user from a group.
54    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
55    pub async fn remove(&self, user_id: &str) -> Result<GroupUserDeletedResource, OpenAIError> {
56        self.client
57            .delete(
58                format!("/organization/groups/{}/users/{user_id}", self.group_id).as_str(),
59                &self.request_options,
60            )
61            .await
62    }
63
64    /// Retrieves a user in a group.
65    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
66    pub async fn retrieve(&self, user_id: &str) -> Result<GroupMemberUser, OpenAIError> {
67        self.client
68            .get(
69                &format!(
70                    "/organization/groups/{group_id}/users/{user_id}",
71                    group_id = self.group_id
72                ),
73                &self.request_options,
74            )
75            .await
76    }
77}