summaryrefslogtreecommitdiffstats
path: root/src/bin/server/args.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/server/args.rs')
-rw-r--r--src/bin/server/args.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/bin/server/args.rs b/src/bin/server/args.rs
new file mode 100644
index 0000000..31c0acc
--- /dev/null
+++ b/src/bin/server/args.rs
@@ -0,0 +1,41 @@
1pub struct Args {
2 pub ip: String,
3 pub port: u16,
4}
5
6pub fn parse_args() -> Args {
7 let args: Vec<String> = std::env::args().collect();
8 let mut ip = "127.0.0.1".to_string();
9 let mut port = 11525;
10 let mut i = 1;
11 while i < args.len() {
12 if args[i] == "-p" {
13 if i + 1 < args.len() {
14 port = args[i + 1].parse::<u16>().unwrap_or_else(|_| {
15 eprintln!("Invalid port number: {}", args[i + 1]);
16 std::process::exit(1);
17 });
18 i += 2;
19 } else {
20 eprintln!("-p requires a port number");
21 std::process::exit(1);
22 }
23 } else if args[i] == "-i" {
24 if i + 1 < args.len() {
25 ip = args[i + 1].clone();
26 if ip != "127.0.0.1" && ip != "0.0.0.0" {
27 eprintln!("Invalid IP address: {}. Must be 127.0.0.1 or 0.0.0.0", ip);
28 std::process::exit(1);
29 }
30 i += 2;
31 } else {
32 eprintln!("-i requires an IP address");
33 std::process::exit(1);
34 }
35 } else {
36 eprintln!("Unknown argument: {}", args[i]);
37 std::process::exit(1);
38 }
39 }
40 Args { ip, port }
41}