From 2f7824e08ec1d449ecc8cfc9a6acef4dee74b6a4 Mon Sep 17 00:00:00 2001 From: Adrian Wannenmacher Date: Wed, 28 Jun 2023 00:45:22 +0200 Subject: [PATCH] apply clippy suggestions --- src/main.rs | 59 ++++++++++++++++++++++------------------- src/persistent_state.rs | 8 +++--- src/target.rs | 13 ++++----- 3 files changed, 42 insertions(+), 38 deletions(-) diff --git a/src/main.rs b/src/main.rs index 82a3374..548cd18 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,7 +18,7 @@ static USER_DIRS: OnceLock = OnceLock::new(); static PROJ_DIRS: OnceLock = OnceLock::new(); fn main() -> anyhow::Result<()> { - let cli = CLI::parse(); + let cli = Cli::parse(); // initialize dirs let user_dirs = UserDirs::new().context("failed to discover user directiories")?; @@ -31,7 +31,7 @@ fn main() -> anyhow::Result<()> { .context("failed to initialize user directories")?; let proj_dirs = PROJ_DIRS.get_or_init(|| proj_dirs); - if let CMD::License = cli.command { + if let Cmd::License = cli.cmd { println!("{}", include_str!("../LICENSE")); return Ok(()); } @@ -42,35 +42,38 @@ fn main() -> anyhow::Result<()> { let mut persistent = PersistentState::read_from_default_file().context("failed to load persistent state")?; - match cli.command { - CMD::Config => { + match cli.cmd { + Cmd::Config => { println!("{cfg}"); } - CMD::PersistentState => { + Cmd::PersistentState => { println!("{persistent}"); } - CMD::Download { name } => { + Cmd::Download { name } => { let mut cache = proj_dirs.cache_dir().to_path_buf(); cache.push(&format!("{:0>16x}", rand::random::())); fs::create_dir_all(&cache).context("failed to create cache dir")?; let name = name - .as_ref() - .map(|n| n.as_str()) + .as_deref() .or(persistent.list()) .context("no list specified or selected")?; - let list = TargetList::load(&name).context("failed to load list")?; + let list = TargetList::load(name).context("failed to load list")?; let mut downloads = list.downloads(); - let mut mapping = HashMap::with_capacity(downloads.len()); - let mut counter = 0; - for d in &mut downloads { - let mut cache_path = cache.clone(); - cache_path.push(format!("{counter:0>16x}")); - let prev = std::mem::replace(&mut d.file_name, cache_path.clone()); - mapping.insert(cache_path, prev); - counter += 1; - } + let mut mapping: HashMap<_, _> = downloads + .iter_mut() + .enumerate() + .map(|(counter, value)| { + let mut cache_path = cache.clone(); + cache_path.push(format!("{counter:0>16x}")); + (cache_path, value) + }) + .map(|(cache, down)| { + let target = std::mem::replace(&mut down.file_name, cache.clone()); + (cache, target) + }) + .collect(); let results = downloader .download(&downloads) @@ -124,7 +127,7 @@ fn main() -> anyhow::Result<()> { fs::remove_dir(cache).context("failed to delete cache directory")?; } - CMD::List { cmd } => match cmd { + Cmd::List { cmd } => match cmd { ListCommand::Create { name, keep_current_selected: keep_current_active, @@ -133,7 +136,7 @@ fn main() -> anyhow::Result<()> { if TargetList::exists(&name) { eprintln!("list already exists"); } else { - TargetList::new(&name, comment.as_ref().map(|c| c.as_str())) + TargetList::new(&name, comment.as_deref()) .context("failed to create target list")?; } @@ -151,9 +154,9 @@ fn main() -> anyhow::Result<()> { } } }, - CMD::Target { cmd } => { + Cmd::Target { cmd } => { let list = persistent.list().context("no list selected")?; - let mut list = TargetList::load(&list).context("failed to load list")?; + let mut list = TargetList::load(list).context("failed to load list")?; match cmd { TargetCommand::Create { @@ -162,8 +165,8 @@ fn main() -> anyhow::Result<()> { comment, keep_current_selected, } => { - let target = Target::new(url, &file, comment.as_ref().map(|c| c.as_str())) - .context("invalid target")?; + let target = + Target::new(url, &file, comment.as_deref()).context("invalid target")?; list.add_target(target); if !keep_current_selected { @@ -181,7 +184,7 @@ fn main() -> anyhow::Result<()> { list.save().context("failed to save list")?; } - CMD::License => { + Cmd::License => { panic!("late command"); } } @@ -191,13 +194,13 @@ fn main() -> anyhow::Result<()> { #[derive(Parser)] #[clap(about, author, version)] -struct CLI { +struct Cli { #[clap(subcommand)] - command: CMD, + cmd: Cmd, } #[derive(Subcommand)] -enum CMD { +enum Cmd { /// Print the current configuration. Config, /// Print the EUPL 1.2, under which this program is licensed. diff --git a/src/persistent_state.rs b/src/persistent_state.rs index d87b322..1eb4f8c 100644 --- a/src/persistent_state.rs +++ b/src/persistent_state.rs @@ -22,7 +22,7 @@ pub struct PersistentState { impl PersistentState { pub fn list(&self) -> Option<&str> { - self.list.as_ref().map(|l| l.as_str()) + self.list.as_deref() } pub fn set_list(&mut self, list: &str) { @@ -65,8 +65,8 @@ impl PersistentState { pub fn read_from_file(path: &Path) -> anyhow::Result { File::open(path) .context("failed to open persistent state file") - .map(|r| BufReader::new(r)) - .and_then(|r| Self::read_from(r)) + .map(BufReader::new) + .and_then(Self::read_from) } pub fn read_from(reader: impl Read) -> anyhow::Result { @@ -98,7 +98,7 @@ impl PersistentState { pub fn save_to_file(&self, path: &Path) -> anyhow::Result<()> { File::create(path) .context("failed to create persistent state file") - .map(|w| BufWriter::new(w)) + .map(BufWriter::new) .and_then(|w| self.save_to(w)) } diff --git a/src/target.rs b/src/target.rs index a48f936..991c6d7 100644 --- a/src/target.rs +++ b/src/target.rs @@ -50,19 +50,20 @@ impl Display for Target { } } -impl Into for &Target { - fn into(self) -> Download { - match self.urls.len() { +impl From<&Target> for Download { + fn from(value: &Target) -> Self { + match value.urls.len() { 0 => panic!("target without url"), - 1 => Download::new(self.urls[0].as_str()), + 1 => Download::new(value.urls[0].as_str()), _ => Download::new_mirrored( - self.urls + value + .urls .iter() .map(|u| u.as_str()) .collect::>() .as_ref(), ), } - .file_name(&self.file) + .file_name(&value.file) } }