typedb_driver/user/
user.rs1use std::{collections::HashMap, sync::Arc};
20
21use crate::{
22    common::{address::Address, Result},
23    connection::server_connection::ServerConnection,
24    error::ConnectionError,
25};
26
27#[derive(Clone, Debug)]
28pub struct User {
29    pub name: String,
30    pub password: Option<String>,
31    pub server_connections: HashMap<Address, ServerConnection>,
32}
33
34impl User {
35    #[cfg_attr(feature = "sync", doc = "user.update_password(username, password);")]
46    #[cfg_attr(not(feature = "sync"), doc = "user.update_password(username, password).await;")]
47    #[cfg_attr(feature = "sync", maybe_async::must_be_sync)]
50    pub async fn update_password(&self, password: impl Into<String>) -> Result<()> {
51        let password = password.into();
52        let mut error_buffer = Vec::with_capacity(self.server_connections.len());
53        for (server_id, server_connection) in self.server_connections.iter() {
54            match server_connection.update_password(self.name.clone(), password.clone()).await {
55                Ok(res) => return Ok(()),
56                Err(err) => error_buffer.push(format!("- {}: {}", server_id, err)),
57            }
58        }
59        Err(ConnectionError::ServerConnectionFailedWithError { error: error_buffer.join("\n") })?
60    }
61
62    #[cfg_attr(feature = "sync", doc = "user.delete();")]
70    #[cfg_attr(not(feature = "sync"), doc = "user.delete().await;")]
71    #[cfg_attr(feature = "sync", maybe_async::must_be_sync)]
74    pub async fn delete(self) -> Result {
75        let mut error_buffer = Vec::with_capacity(self.server_connections.len());
76        for (server_id, server_connection) in self.server_connections.iter() {
77            match server_connection.delete_user(self.name.clone()).await {
78                Ok(res) => return Ok(res),
79                Err(err) => error_buffer.push(format!("- {}: {}", server_id, err)),
80            }
81        }
82        Err(ConnectionError::ServerConnectionFailedWithError { error: error_buffer.join("\n") })?
83    }
84}