From a8b69d36ef52e6cb0981d87b1ccfa53c97931a74 Mon Sep 17 00:00:00 2001 From: Adrian Groh Date: Sat, 20 May 2023 15:44:03 +0200 Subject: [PATCH] refactor: simplify code with `.ok()` --- src/lib.rs | 71 ++++++++++++++++++----------------------------------- src/main.rs | 43 +++++++++----------------------- 2 files changed, 36 insertions(+), 78 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 1b00a80..5b93da9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -246,18 +246,12 @@ pub fn os(general_readout: &GeneralReadout) -> Option { } } } - _ => match general_readout.os_name() { - Ok(os) => Some(os), - Err(_) => None, - }, + _ => general_readout.os_name().ok(), } } pub fn kernel(kernel_readout: &KernelReadout) -> Option { - match kernel_readout.os_release() { - Ok(kernel_version) => Some(kernel_version), - Err(_) => None, - } + kernel_readout.os_release().ok() } fn seconds_to_string(time: usize) -> String { @@ -283,10 +277,7 @@ fn seconds_to_string(time: usize) -> String { } pub fn uptime(general_readout: &GeneralReadout) -> Option { - match general_readout.uptime() { - Ok(uptime) => Some(seconds_to_string(uptime)), - Err(_) => None, - } + Some(seconds_to_string(general_readout.uptime().ok()?)) } pub fn host(general_readout: &GeneralReadout) -> Option { @@ -348,13 +339,11 @@ pub fn host(general_readout: &GeneralReadout) -> Option { Some(final_str) } } - _ => match general_readout.machine() { - Ok(host) => Some(host), - Err(_) => match general_readout.cpu_model_name() { - Ok(host) => Some(host), - Err(_) => None, - }, - }, + // on non-linux systems, try general_readout.machine(), use cpu model name as fallback + _ => general_readout + .machine() + .ok() + .or_else(|| general_readout.cpu_model_name().ok()), } } @@ -374,43 +363,31 @@ pub fn logo(logo_name: &str) -> Logo { } pub fn shell(general_readout: &GeneralReadout) -> Option { - match general_readout.shell( - libmacchina::traits::ShellFormat::Relative, - libmacchina::traits::ShellKind::Default, - ) { - Ok(shell) => Some(shell), - Err(_) => match dotenvy::var("SHELL") { - Ok(shell) => Some(shell), - Err(_) => None, - }, - } + general_readout + .shell( + libmacchina::traits::ShellFormat::Relative, + libmacchina::traits::ShellKind::Default, + ) + .ok() + .or_else(|| dotenvy::var("SHELL").ok()) } pub fn editor() -> Option { - match env::var("VISUAL") { - Ok(editor) => Some(editor.trim().to_owned()), - Err(_) => match env::var("EDITOR") { - Ok(editor) => Some(editor.trim().to_owned()), - Err(_) => None, - }, - } + env::var("VISUAL") + .or_else(|_| env::var("EDITOR")) + .ok() + .map(|editor| editor.trim().to_owned()) } pub fn wm(general_readout: &GeneralReadout) -> Option { - match general_readout.window_manager() { - Ok(wm) => Some(wm), - Err(_) => None, - } + general_readout.window_manager().ok() } pub fn de(general_readout: &GeneralReadout) -> Option { - match general_readout.desktop_environment() { - Ok(de) => Some(de), - Err(_) => match dotenvy::var("XDG_CURRENT_DESKTOP") { - Ok(de) => Some(de), - Err(_) => None, - }, - } + general_readout + .desktop_environment() + .ok() + .or_else(|| dotenvy::var("XDG_CURRENT_DESKTOP").ok()) } pub fn palette() -> String { diff --git a/src/main.rs b/src/main.rs index 7814a33..b5ba98d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -150,8 +150,7 @@ fn pfetch(info: Vec<(pfetch::Color, String, String)>, logo: pfetch::Logo, logo_e println!("{pfetch_str}"); // enable line wrap - crossterm::execute!(std::io::stdout(), crossterm::terminal::EnableLineWrap) - .unwrap_or_default(); + crossterm::execute!(std::io::stdout(), crossterm::terminal::EnableLineWrap).unwrap_or_default(); } struct Readouts { @@ -168,21 +167,11 @@ fn get_info( ) -> Option { match info { PfetchInfo::Ascii => None, - PfetchInfo::Title => { - let hostname_override = match dotenvy::var("HOSTNAME") { - Ok(hostname) => Some(hostname), - Err(_) => None, - }; - let username_override = match dotenvy::var("USER") { - Ok(username) => Some(username), - Err(_) => None, - }; - pfetch::user_at_hostname( - &readouts.general_readout, - &username_override, - &hostname_override, - ) - } + PfetchInfo::Title => pfetch::user_at_hostname( + &readouts.general_readout, + &dotenvy::var("USER").ok(), + &dotenvy::var("HOSTNAME").ok(), + ), PfetchInfo::Os => pfetch::os(&readouts.general_readout), PfetchInfo::Host => pfetch::host(&readouts.general_readout), PfetchInfo::Kernel => pfetch::kernel(&readouts.kernel_readout), @@ -291,20 +280,12 @@ fn main() { .iter() .filter_map(|info| match info { PfetchInfo::Os => Some((logo.primary_color, info.to_string(), os.clone())), - _ => { - let info_result = get_info(info, &readouts, skip_slow_package_managers); - match info_result { - Some(info_str) => match info { - PfetchInfo::Title => Some((logo.secondary_color, info_str, "".to_string())), - PfetchInfo::BlankLine => { - Some((logo.primary_color, "".to_string(), "".to_string())) - } - PfetchInfo::Palette => Some((logo.primary_color, info_str, "".to_string())), - _ => Some((logo.primary_color, info.to_string(), info_str)), - }, - None => None, - } - } + _ => get_info(info, &readouts, skip_slow_package_managers).map(|info_str| match info { + PfetchInfo::Title => (logo.secondary_color, info_str, "".to_string()), + PfetchInfo::BlankLine => (logo.primary_color, "".to_string(), "".to_string()), + PfetchInfo::Palette => (logo.primary_color, info_str, "".to_string()), + _ => (logo.primary_color, info.to_string(), info_str), + }), }) .collect();