mongodb_atlas_admin/api/database_users/routes/
create.rs1use 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}