The cross-platform version manager toolset crates.io/crates/hyper-jump
at main 29 lines 943 B view raw
1use std::path::PathBuf; 2 3use crate::ports::Env; 4 5#[derive(Clone, Copy)] 6pub struct StdEnv; 7 8impl Env for StdEnv { 9 fn exe_name(&self) -> String { 10 std::env::args() 11 .next() 12 .as_deref() 13 .and_then(|p| std::path::Path::new(p).file_stem()) 14 .and_then(|s| s.to_str()) 15 .unwrap_or_default() 16 .to_string() 17 } 18 19 fn args(&self) -> Vec<String> { std::env::args().collect() } 20 fn root_dir(&self) -> Option<PathBuf> { 21 std::env::var_os("HYPER_JUMP_ROOT_DIR").map(PathBuf::from) 22 } 23 fn packages_file(&self) -> Option<PathBuf> { 24 std::env::var_os("HYPER_JUMP_PACKAGES_FILE").map(PathBuf::from) 25 } 26 fn home_dir(&self) -> Option<PathBuf> { std::env::var_os("HOME").map(PathBuf::from) } 27 fn current_exe(&self) -> anyhow::Result<PathBuf> { Ok(std::env::current_exe()?) } 28 fn path_var(&self) -> Option<String> { std::env::var("PATH").ok() } 29}