1
mod create_databases;
2
mod create_users;
3
mod drop_databases;
4
mod drop_users;
5
mod list_all_databases;
6
mod list_all_privileges;
7
mod list_all_users;
8
mod list_databases;
9
mod list_privileges;
10
mod list_users;
11
mod lock_users;
12
mod modify_privileges;
13
mod passwd_user;
14
mod unlock_users;
15

            
16
pub use create_databases::*;
17
pub use create_users::*;
18
pub use drop_databases::*;
19
pub use drop_users::*;
20
pub use list_all_databases::*;
21
pub use list_all_privileges::*;
22
pub use list_all_users::*;
23
pub use list_databases::*;
24
pub use list_privileges::*;
25
pub use list_users::*;
26
pub use lock_users::*;
27
pub use modify_privileges::*;
28
pub use passwd_user::*;
29
pub use unlock_users::*;
30

            
31
use serde::{Deserialize, Serialize};
32
use tokio::net::UnixStream;
33
use tokio_serde::{Framed as SerdeFramed, formats::Bincode};
34
use tokio_util::codec::{Framed, LengthDelimitedCodec};
35

            
36
pub type ServerToClientMessageStream = SerdeFramed<
37
    Framed<UnixStream, LengthDelimitedCodec>,
38
    Request,
39
    Response,
40
    Bincode<Request, Response>,
41
>;
42

            
43
pub type ClientToServerMessageStream = SerdeFramed<
44
    Framed<UnixStream, LengthDelimitedCodec>,
45
    Response,
46
    Request,
47
    Bincode<Response, Request>,
48
>;
49

            
50
pub 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

            
55
pub 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)]
62
pub 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)]
84
pub 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
}