1use clap::Parser;
18
19#[derive(Debug, Clone, Parser)]
20#[command(name = "entdb", about = "EntDB PostgreSQL-compatible server")]
21pub struct Cli {
22 #[arg(
23 short = 'd',
24 long = "data-path",
25 alias = "data",
26 default_value = "ent.db"
27 )]
28 pub data_path: String,
29
30 #[arg(long, default_value = "127.0.0.1")]
31 pub host: String,
32
33 #[arg(short, long, default_value_t = 5433)]
34 pub port: u16,
35
36 #[arg(long, default_value_t = 1024)]
37 pub buffer_pool_size: usize,
38
39 #[arg(long, default_value_t = 256)]
40 pub max_connections: usize,
41
42 #[arg(long, default_value_t = 1_048_576)]
43 pub max_statement_bytes: usize,
44
45 #[arg(long, default_value_t = 30_000)]
46 pub query_timeout_ms: u64,
47
48 #[arg(long, default_value = "md5")]
49 pub auth_method: String,
50
51 #[arg(long, default_value_t = 4096)]
52 pub scram_iterations: usize,
53
54 #[arg(long, default_value = "entdb")]
55 pub auth_user: String,
56
57 #[arg(long, default_value = "entdb")]
58 pub auth_password: String,
59
60 #[arg(long)]
61 pub auth_password_env: Option<String>,
62
63 #[arg(long)]
64 pub auth_password_file: Option<String>,
65
66 #[arg(long)]
67 pub tls_cert: Option<String>,
68
69 #[arg(long)]
70 pub tls_key: Option<String>,
71}
72
73#[cfg(test)]
74mod tests {
75 use super::Cli;
76 use clap::Parser;
77
78 #[test]
79 fn cli_parses_data_path_long_flag() {
80 let cli = Cli::parse_from(["entdb", "--data-path", "./x.db"]);
81 assert_eq!(cli.data_path, "./x.db");
82 }
83
84 #[test]
85 fn cli_parses_data_alias_flag() {
86 let cli = Cli::parse_from(["entdb", "--data", "./y.db"]);
87 assert_eq!(cli.data_path, "./y.db");
88 }
89
90 #[test]
91 fn cli_parses_host_without_short_conflict() {
92 let cli = Cli::parse_from(["entdb", "--host", "0.0.0.0"]);
93 assert_eq!(cli.host, "0.0.0.0");
94 }
95}