diff --git a/src/cli/status.rs b/src/cli/status.rs index bd911be..4f42b39 100644 --- a/src/cli/status.rs +++ b/src/cli/status.rs @@ -48,8 +48,9 @@ pub async fn run(name: Option, json: bool) -> anyhow::Result<()> { name: pair.name.clone(), mount_point: pair.mount_point.display().to_string(), active, - local_source: target::local_source(&pair.local, &cfg.settings), - local_reachable: network::is_reachable(&local_src_host(&pair.local, &cfg.settings)), + local_source: target::local_source(&pair.local, &cfg.settings) + .unwrap_or_else(|_| "unresolved".to_string()), + local_reachable: local_reachable(&pair.local, &cfg.settings), cloud_source: target::cloud_source(&pair.cloud), cloud_reachable: network::is_reachable(&pair.cloud.host_or_url), } @@ -88,11 +89,16 @@ fn reachable_str(reachable: bool) -> &'static str { } } -fn local_src_host( +/// `false` wenn die Adresse (MAC->IP) gar nicht erst aufgelöst werden kann, statt den +/// Platzhalter-String `"unresolved"` an `network::is_reachable` weiterzureichen - das würde +/// dort einen sinnlosen `ping unresolved`-Aufruf gegen einen nicht existierenden Hostnamen +/// auslösen statt korrekt "nicht erreichbar" zu melden. +fn local_reachable( local: &smart_mount::config::LocalSide, settings: &smart_mount::config::GlobalSettings, -) -> String { - smart_mount::network::address::resolve_ip(&local.address, settings) - .map(|ip| ip.to_string()) - .unwrap_or_else(|_| "unresolved".to_string()) +) -> bool { + match smart_mount::network::address::resolve_ip(&local.address, settings) { + Ok(ip) => network::is_reachable(&ip.to_string()), + Err(_) => false, + } }