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}