typedb_driver/user/
user.rs1use std::sync::Arc;
20
21use crate::{
22 common::Result,
23 connection::server::{server_manager::ServerManager, server_routing::ServerRouting},
24 info::UserInfo,
25};
26
27#[derive(Clone, Debug)]
29pub struct User {
30 name: String,
31 password: Option<String>,
32 server_manager: Arc<ServerManager>,
33}
34
35impl User {
36 pub(crate) fn new(name: String, password: Option<String>, server_manager: Arc<ServerManager>) -> Self {
37 Self { name, password, server_manager }
38 }
39
40 pub(crate) fn from_info(user_info: UserInfo, server_manager: Arc<ServerManager>) -> Self {
41 Self::new(user_info.name, user_info.password, server_manager)
42 }
43
44 pub fn name(&self) -> &str {
46 self.name.as_str()
47 }
48
49 pub fn password(&self) -> Option<&str> {
52 self.password.as_ref().map(|value| value.as_str())
53 }
54
55 #[cfg_attr(feature = "sync", doc = "user.update_password(password);")]
65 #[cfg_attr(not(feature = "sync"), doc = "user.update_password(password).await;")]
66 #[cfg_attr(feature = "sync", maybe_async::must_be_sync)]
68 pub async fn update_password(&self, password: impl Into<String>) -> Result<()> {
69 let password = password.into();
70 self.server_manager
71 .execute(ServerRouting::Auto, |server_connection| {
72 let name = self.name.clone();
73 let password = password.clone();
74 async move { server_connection.update_password(name, password).await }
75 })
76 .await
77 }
78
79 #[cfg_attr(feature = "sync", doc = "user.delete();")]
85 #[cfg_attr(not(feature = "sync"), doc = "user.delete().await;")]
86 #[cfg_attr(feature = "sync", maybe_async::must_be_sync)]
88 pub async fn delete(self) -> Result {
89 self.server_manager
90 .execute(ServerRouting::Auto, |server_connection| {
91 let name = self.name.clone();
92 async move { server_connection.delete_user(name).await }
93 })
94 .await
95 }
96}