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;

/// Transport class for editing a 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)
  }
}