aboutsummaryrefslogtreecommitdiffstats
path: root/mumctl
diff options
context:
space:
mode:
authorEskil <eskilq@kth.se>2020-10-16 02:36:13 +0200
committerEskil <eskilq@kth.se>2020-10-16 02:36:13 +0200
commit27d8b16b40a5f5a0633c2e54640999d4e6cdd9a3 (patch)
tree769971b8921aa2c0d5c2845323a898f1603cfebe /mumctl
parent18a3c0b3cf8254b70857e31ddd2b6213b10db156 (diff)
parentd15a4adb457b8caab4e76baff8e27ade347a275d (diff)
downloadmum-27d8b16b40a5f5a0633c2e54640999d4e6cdd9a3.tar.gz
Merge branch 'error-handling' into 'main'
Error handling Closes #13 See merge request gustav/mum!3
Diffstat (limited to 'mumctl')
-rw-r--r--mumctl/Cargo.toml1
-rw-r--r--mumctl/src/main.rs47
2 files changed, 31 insertions, 17 deletions
diff --git a/mumctl/Cargo.toml b/mumctl/Cargo.toml
index 1f2f727..c955afa 100644
--- a/mumctl/Cargo.toml
+++ b/mumctl/Cargo.toml
@@ -12,6 +12,7 @@ edition = "2018"
mumlib = { path = "../mumlib" }
clap = { version = "2.33", features = ["yaml"] }
+colored = "2.0"
log = "0.4"
ipc-channel = "0.14"
diff --git a/mumctl/src/main.rs b/mumctl/src/main.rs
index 124cc8c..ae4acc5 100644
--- a/mumctl/src/main.rs
+++ b/mumctl/src/main.rs
@@ -4,6 +4,15 @@ use log::*;
use mumlib::command::{Command, CommandResponse};
use mumlib::setup_logger;
use std::{fs, io};
+use colored::Colorize;
+
+macro_rules! err_print {
+ ($func:expr) => {
+ if let Err(e) = $func {
+ println!("{} {}", "error:".red(), e);
+ }
+ };
+}
fn main() {
setup_logger();
@@ -41,36 +50,40 @@ fn main() {
.long("fish")));
let matches = app.clone().get_matches();
-
- debug!("Matching clap");
+
if let Some(matches) = matches.subcommand_matches("server") {
if let Some(matches) = matches.subcommand_matches("connect") {
let host = matches.value_of("host").unwrap();
let username = matches.value_of("username").unwrap();
- send_command(Command::ServerConnect {
+ err_print!(send_command(Command::ServerConnect {
host: host.to_string(),
port: 64738u16, //TODO
username: username.to_string(),
accept_invalid_cert: true, //TODO
- }).unwrap();
+ }));
} else if let Some(_) = matches.subcommand_matches("disconnect") {
- send_command(Command::ServerDisconnect).unwrap();
+ err_print!(send_command(Command::ServerDisconnect));
}
} else if let Some(matches) = matches.subcommand_matches("channel") {
if let Some(_matches) = matches.subcommand_matches("list") {
- let res = send_command(Command::ChannelList).unwrap().unwrap();
- println!("{:#?}", res);
- /*if matches.is_present("short") {
- None //TODO
- } else {
- None //TODO
- };*/
+ match send_command(Command::ChannelList) {
+ Ok(res) => {
+ println!("{:#?}", res.unwrap());
+ }
+ Err(e) => println!("{} {}", "error:".red(), e),
+ }
} else if let Some(matches) = matches.subcommand_matches("connect") {
- send_command(Command::ChannelJoin {
+ err_print!(send_command(Command::ChannelJoin {
channel_id: matches.value_of("channel").unwrap().parse::<u32>().unwrap()
- }).unwrap();
+ }));
}
} else if let Some(_matches) = matches.subcommand_matches("status") {
+ match send_command(Command::Status) {
+ Ok(res) => {
+ println!("{:#?}", res.unwrap());
+ }
+ Err(e) => println!("{} {}", "error:".red(), e),
+ }
let res = send_command(Command::Status).unwrap().unwrap();
println!("{:#?}", res);
} else if let Some(matches) = matches.subcommand_matches("completions") {
@@ -91,13 +104,13 @@ fn main() {
};
}
-fn send_command(command: Command) -> Result<Option<CommandResponse>, ()> {
- let (tx_client, rx_client): (IpcSender<Result<Option<CommandResponse>, ()>>,
- IpcReceiver<Result<Option<CommandResponse>, ()>>) = ipc::channel().unwrap();
+fn send_command(command: Command) -> mumlib::error::Result<Option<CommandResponse>> {
+ let (tx_client, rx_client) = ipc::channel::<mumlib::error::Result<Option<CommandResponse>>>().unwrap();
let server_name = fs::read_to_string("/var/tmp/mumd-oneshot").unwrap(); //TODO don't panic
let tx0 = IpcSender::connect(server_name).unwrap();
+
tx0.send((command, tx_client)).unwrap();
rx_client.recv().unwrap()