forked from janek/mostr
fix(main): print Result warnings via macro
This commit is contained in:
parent
126bd8cf81
commit
07bba314ec
|
@ -10,17 +10,6 @@ pub fn some_non_empty(str: &str) -> Option<String> {
|
||||||
if str.is_empty() { None } else { Some(str.to_string()) }
|
if str.is_empty() { None } else { Some(str.to_string()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO as macro so that log comes from appropriate module
|
|
||||||
pub fn or_print<T, U: Display>(result: Result<T, U>) -> Option<T> {
|
|
||||||
match result {
|
|
||||||
Ok(value) => Some(value),
|
|
||||||
Err(error) => {
|
|
||||||
warn!("{}", error);
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn prompt(prompt: &str) -> Option<String> {
|
pub fn prompt(prompt: &str) -> Option<String> {
|
||||||
print!("{} ", prompt);
|
print!("{} ", prompt);
|
||||||
stdout().flush().unwrap();
|
stdout().flush().unwrap();
|
||||||
|
|
46
src/main.rs
46
src/main.rs
|
@ -36,6 +36,28 @@ mod kinds;
|
||||||
const UNDO_DELAY: u64 = 60;
|
const UNDO_DELAY: u64 = 60;
|
||||||
const INACTVITY_DELAY: u64 = 200;
|
const INACTVITY_DELAY: u64 = 200;
|
||||||
|
|
||||||
|
/// Turn a Result into an Option, showing a warning on error with optional prefix
|
||||||
|
macro_rules! or_warn {
|
||||||
|
($result:expr $(,)?) => {
|
||||||
|
match $result {
|
||||||
|
Ok(value) => Some(value),
|
||||||
|
Err(error) => {
|
||||||
|
warn!("{}", error);
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
($result:expr, $msg:expr $(,)?) => {
|
||||||
|
match $result {
|
||||||
|
Ok(value) => Some(value),
|
||||||
|
Err(error) => {
|
||||||
|
warn!("{}: {}", $msg, error);
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
type Events = Vec<Event>;
|
type Events = Vec<Event>;
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
|
@ -131,8 +153,8 @@ async fn main() {
|
||||||
.init();
|
.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
let config_dir = or_print(BaseDirectories::new())
|
let config_dir = or_warn!(BaseDirectories::new(), "Could not obtain config directory")
|
||||||
.and_then(|d| or_print(d.create_config_directory("mostr")))
|
.and_then(|d| or_warn!(d.create_config_directory("mostr"), "Could not create config directory"))
|
||||||
.unwrap_or(PathBuf::new());
|
.unwrap_or(PathBuf::new());
|
||||||
let keysfile = config_dir.join("key");
|
let keysfile = config_dir.join("key");
|
||||||
let relayfile = config_dir.join("relays");
|
let relayfile = config_dir.join("relays");
|
||||||
|
@ -142,9 +164,9 @@ async fn main() {
|
||||||
_ => {
|
_ => {
|
||||||
warn!("Could not read keys from {}", keysfile.to_string_lossy());
|
warn!("Could not read keys from {}", keysfile.to_string_lossy());
|
||||||
let keys = prompt("Secret Key?")
|
let keys = prompt("Secret Key?")
|
||||||
.and_then(|s| or_print(Keys::from_str(&s)))
|
.and_then(|s| or_warn!(Keys::from_str(&s)))
|
||||||
.unwrap_or_else(|| Keys::generate());
|
.unwrap_or_else(|| Keys::generate());
|
||||||
or_print(fs::write(&keysfile, keys.secret_key().unwrap().to_string()));
|
or_warn!(fs::write(&keysfile, keys.secret_key().unwrap().to_string()));
|
||||||
keys
|
keys
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -155,12 +177,12 @@ async fn main() {
|
||||||
// TODO use NewRelay message for all relays
|
// TODO use NewRelay message for all relays
|
||||||
match var("MOSTR_RELAY") {
|
match var("MOSTR_RELAY") {
|
||||||
Ok(relay) => {
|
Ok(relay) => {
|
||||||
or_print(client.add_relay(relay).await);
|
or_warn!(client.add_relay(relay).await);
|
||||||
}
|
}
|
||||||
_ => match File::open(&relayfile).map(|f| BufReader::new(f).lines().flatten()) {
|
_ => match File::open(&relayfile).map(|f| BufReader::new(f).lines().flatten()) {
|
||||||
Ok(lines) => {
|
Ok(lines) => {
|
||||||
for line in lines {
|
for line in lines {
|
||||||
or_print(client.add_relay(line).await);
|
or_warn!(client.add_relay(line).await);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
@ -171,9 +193,9 @@ async fn main() {
|
||||||
} else {
|
} else {
|
||||||
"wss://".to_string() + &line
|
"wss://".to_string() + &line
|
||||||
};
|
};
|
||||||
or_print(client.add_relay(url.clone()).await).map(|bool| {
|
or_warn!(client.add_relay(url.clone()).await).map(|bool| {
|
||||||
if bool {
|
if bool {
|
||||||
or_print(fs::write(&relayfile, url));
|
or_warn!(fs::write(&relayfile, url));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -205,7 +227,7 @@ async fn main() {
|
||||||
if let Ok(user) = var("USER") {
|
if let Ok(user) = var("USER") {
|
||||||
let metadata = Metadata::new()
|
let metadata = Metadata::new()
|
||||||
.name(user);
|
.name(user);
|
||||||
or_print(client.set_metadata(&metadata).await);
|
or_warn!(client.set_metadata(&metadata).await);
|
||||||
}
|
}
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
|
@ -584,7 +606,7 @@ async fn main() {
|
||||||
tasks.move_to(None);
|
tasks.move_to(None);
|
||||||
if let Some((url, tasks)) = relays.iter().find(|(key, _)| key.as_str().starts_with(&input)) {
|
if let Some((url, tasks)) = relays.iter().find(|(key, _)| key.as_str().starts_with(&input)) {
|
||||||
selected_relay = Some(url.clone());
|
selected_relay = Some(url.clone());
|
||||||
or_print(tasks.print_tasks());
|
or_warn!(tasks.print_tasks());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
match Url::parse(&input) {
|
match Url::parse(&input) {
|
||||||
|
@ -603,7 +625,7 @@ async fn main() {
|
||||||
tasks.filter_or_create(tasks.get_position().as_ref(), &input);
|
tasks.filter_or_create(tasks.get_position().as_ref(), &input);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
or_print(tasks.print_tasks());
|
or_warn!(tasks.print_tasks());
|
||||||
}
|
}
|
||||||
Some(Err(e)) => warn!("{}", e),
|
Some(Err(e)) => warn!("{}", e),
|
||||||
None => break,
|
None => break,
|
||||||
|
@ -616,5 +638,5 @@ async fn main() {
|
||||||
drop(relays);
|
drop(relays);
|
||||||
|
|
||||||
info!("Submitting pending updates...");
|
info!("Submitting pending updates...");
|
||||||
or_print(sender.await);
|
or_warn!(sender.await);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue