mongodb_atlas_admin/api/database_users/routes/
create.rs

1use std::borrow::Cow;
2
3use http::Method;
4use reqwest::Response;
5
6use super::super::DatabaseUser;
7use crate::Endpoint;
8
9pub enum CreateDatabaseUser {
10    AwsUserOrRole {
11        arn: String,
12        group_id: String,
13    },
14    InternalUser {
15        username: String,
16        group_id: String,
17        database_name: String,
18    },
19}
20
21impl CreateDatabaseUser {
22    fn group_id(&self) -> &str {
23        match self {
24            Self::AwsUserOrRole { group_id, .. } => group_id,
25            Self::InternalUser { group_id, .. } => group_id,
26        }
27    }
28
29    fn database_name(&self) -> &str {
30        match self {
31            Self::AwsUserOrRole { .. } => "$external",
32            Self::InternalUser {
33                database_name: database,
34                ..
35            } => database,
36        }
37    }
38
39    fn username(&self) -> Cow<str> {
40        match self {
41            Self::AwsUserOrRole { arn, .. } => urlencoding::encode(arn),
42            Self::InternalUser { username, .. } => urlencoding::encode(username),
43        }
44    }
45}
46
47pub type CreateDatabaseUserData = DatabaseUser;
48
49#[derive(Debug, thiserror::Error)]
50#[error("Error")]
51pub struct Error;
52
53#[async_trait::async_trait]
54impl Endpoint for CreateDatabaseUser {
55    type Data = CreateDatabaseUserData;
56    type Error = Error;
57
58    fn method() -> Method {
59        Method::GET
60    }
61
62    fn path(&self) -> Cow<'static, str> {
63        format!(
64            "/groups/{}/databaseUsers/{}/{}",
65            self.group_id(),
66            self.database_name(),
67            self.username()
68        )
69        .into()
70    }
71
72    async fn get_data(res: Response) -> Result<Self::Data, Error> {
73        Ok(res.json::<Self::Data>().await.unwrap())
74    }
75}