Skip to main content

outfox_openai/admin/
group_users.rs

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