mysqladm/core/protocol/
commands.rs

1mod create_databases;
2mod create_users;
3mod drop_databases;
4mod drop_users;
5mod list_all_databases;
6mod list_all_privileges;
7mod list_all_users;
8mod list_databases;
9mod list_privileges;
10mod list_users;
11mod lock_users;
12mod modify_privileges;
13mod passwd_user;
14mod unlock_users;
15
16pub use create_databases::*;
17pub use create_users::*;
18pub use drop_databases::*;
19pub use drop_users::*;
20pub use list_all_databases::*;
21pub use list_all_privileges::*;
22pub use list_all_users::*;
23pub use list_databases::*;
24pub use list_privileges::*;
25pub use list_users::*;
26pub use lock_users::*;
27pub use modify_privileges::*;
28pub use passwd_user::*;
29pub use unlock_users::*;
30
31use serde::{Deserialize, Serialize};
32use tokio::net::UnixStream;
33use tokio_serde::{Framed as SerdeFramed, formats::Bincode};
34use tokio_util::codec::{Framed, LengthDelimitedCodec};
35
36pub type ServerToClientMessageStream = SerdeFramed<
37    Framed<UnixStream, LengthDelimitedCodec>,
38    Request,
39    Response,
40    Bincode<Request, Response>,
41>;
42
43pub type ClientToServerMessageStream = SerdeFramed<
44    Framed<UnixStream, LengthDelimitedCodec>,
45    Response,
46    Request,
47    Bincode<Response, Request>,
48>;
49
50pub fn create_server_to_client_message_stream(socket: UnixStream) -> ServerToClientMessageStream {
51    let length_delimited = Framed::new(socket, LengthDelimitedCodec::new());
52    tokio_serde::Framed::new(length_delimited, Bincode::default())
53}
54
55pub fn create_client_to_server_message_stream(socket: UnixStream) -> ClientToServerMessageStream {
56    let length_delimited = Framed::new(socket, LengthDelimitedCodec::new());
57    tokio_serde::Framed::new(length_delimited, Bincode::default())
58}
59
60#[non_exhaustive]
61#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
62pub enum Request {
63    CreateDatabases(CreateDatabasesRequest),
64    DropDatabases(DropDatabasesRequest),
65    ListDatabases(ListDatabasesRequest),
66    ListPrivileges(ListPrivilegesRequest),
67    ModifyPrivileges(ModifyPrivilegesRequest),
68
69    CreateUsers(CreateUsersRequest),
70    DropUsers(DropUsersRequest),
71    PasswdUser(SetUserPasswordRequest),
72    ListUsers(ListUsersRequest),
73    LockUsers(LockUsersRequest),
74    UnlockUsers(UnlockUsersRequest),
75
76    // Commit,
77    Exit,
78}
79
80// TODO: include a generic "message" that will display a message to the user?
81
82#[non_exhaustive]
83#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
84pub enum Response {
85    // Specific data for specific commands
86    CreateDatabases(CreateDatabasesResponse),
87    DropDatabases(DropDatabasesResponse),
88    ListDatabases(ListDatabasesResponse),
89    ListAllDatabases(ListAllDatabasesResponse),
90    ListPrivileges(ListPrivilegesResponse),
91    ListAllPrivileges(ListAllPrivilegesResponse),
92    ModifyPrivileges(ModifyPrivilegesResponse),
93
94    CreateUsers(CreateUsersResponse),
95    DropUsers(DropUsersResponse),
96    SetUserPassword(SetUserPasswordResponse),
97    ListUsers(ListUsersResponse),
98    ListAllUsers(ListAllUsersResponse),
99    LockUsers(LockUsersResponse),
100    UnlockUsers(UnlockUsersResponse),
101
102    // Generic responses
103    Ready,
104    Error(String),
105}