1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
use dbui_core::database::conn::{ConnectionParams, DatabaseEngine};
use dbui_core::Project;
#[derive(Debug, serde::Deserialize)]
pub struct ProjectForm {
key: String,
name: String,
server: String,
port: String,
database: String,
user: String,
password: String,
tls: bool
}
impl ProjectForm {
pub fn key(&self) -> &String {
&self.key
}
pub fn name(&self) -> &String {
&self.name
}
pub fn server(&self) -> &String {
&self.server
}
pub fn port(&self) -> Option<i32> {
match &self.port {
p if p.is_empty() => None,
p => match p.parse() {
Ok(i) => Some(i),
Err(_) => None
}
}
}
pub fn database(&self) -> &String {
&self.database
}
pub fn user(&self) -> &String {
&self.user
}
pub fn password(&self) -> &String {
&self.password
}
pub fn tls(&self) -> bool {
self.tls
}
pub fn as_project(&self) -> Project {
let name = if self.name().is_empty() {
self.key.clone()
} else {
self.name().clone()
};
let pass = if self.password() == "" {
None
} else {
Some(self.password().clone())
};
let conn = ConnectionParams::new(
DatabaseEngine::Postgres,
self.server().clone(),
self.port(),
self.database().clone(),
self.user().clone(),
pass,
self.tls()
);
Project::new(self.key().clone(), name, conn)
}
}