mysql_async/conn/routines/
change_user.rs
1use futures_core::future::BoxFuture;
2use futures_util::FutureExt;
3use mysql_common::{
4 constants::{UTF8MB4_GENERAL_CI, UTF8_GENERAL_CI},
5 packets::{ComChangeUser, ComChangeUserMoreData},
6};
7#[cfg(feature = "tracing")]
8use tracing::debug_span;
9
10use crate::Conn;
11
12use super::Routine;
13
14#[derive(Debug, Copy, Clone)]
16pub struct ChangeUser;
17
18impl Routine<()> for ChangeUser {
19 fn call<'a>(&'a mut self, conn: &'a mut Conn) -> BoxFuture<'a, crate::Result<()>> {
20 #[cfg(feature = "tracing")]
21 let span = debug_span!(
22 "mysql_async::change_user",
23 mysql_async.connection.id = conn.id()
24 );
25
26 let com_change_user = ComChangeUser::new()
27 .with_user(conn.opts().user().map(|x| x.as_bytes()))
28 .with_database(conn.opts().db_name().map(|x| x.as_bytes()))
29 .with_auth_plugin_data(
30 conn.inner
31 .auth_plugin
32 .gen_data(conn.opts().pass(), &conn.inner.nonce)
33 .as_deref(),
34 )
35 .with_more_data(Some(
36 ComChangeUserMoreData::new(if conn.inner.version >= (5, 5, 3) {
37 UTF8MB4_GENERAL_CI
38 } else {
39 UTF8_GENERAL_CI
40 })
41 .with_auth_plugin(Some(conn.inner.auth_plugin.clone()))
42 .with_connect_attributes(None),
43 ))
44 .into_owned();
45
46 let fut = async move {
47 conn.write_command(&com_change_user).await?;
48 conn.inner.auth_switched = false;
49 conn.continue_auth().await?;
50 Ok(())
51 };
52
53 #[cfg(feature = "tracing")]
54 let fut = instrument_result!(fut, span);
55
56 fut.boxed()
57 }
58}