From 1e2f09a61a3dc7614f70139cc7e375571f0061df Mon Sep 17 00:00:00 2001 From: Ryan Cao <70191398+ryanccn@users.noreply.github.com> Date: Sat, 11 Nov 2023 18:38:23 +0800 Subject: [PATCH] use `UserVersion` for filtering --- src/commands/ls_remote.rs | 32 +++++++------------------------- 1 file changed, 7 insertions(+), 25 deletions(-) diff --git a/src/commands/ls_remote.rs b/src/commands/ls_remote.rs index 6cc03e9..e8dd70f 100644 --- a/src/commands/ls_remote.rs +++ b/src/commands/ls_remote.rs @@ -1,12 +1,14 @@ use crate::config::FnmConfig; use crate::remote_node_index; +use crate::user_version::UserVersion; + use colored::Colorize; use thiserror::Error; #[derive(clap::Parser, Debug)] pub struct LsRemote { - /// Filter for version prefixes - filter: Option, + /// Filter for versions + filter: Option, // Version sorting order #[arg(long, default_value = "asc")] @@ -17,22 +19,12 @@ impl super::command::Command for LsRemote { type Error = Error; fn apply(self, config: &FnmConfig) -> Result<(), Self::Error> { - let filter = self - .filter - .and_then(|f| Some(f.strip_prefix('v').unwrap_or(&f).to_owned())); - let mut all_versions = remote_node_index::list(&config.node_dist_mirror, &self.sort)?; - if let Some(filter) = &filter { + if let Some(filter) = &self.filter { all_versions = all_versions .into_iter() - .filter(|v| { - v.version - .v_str() - .strip_prefix('v') - .and_then(|rv| Some(rv.starts_with(filter))) - .unwrap_or(false) - }) + .filter(|v| filter.matches(&v.version, config)) .collect(); } @@ -45,17 +37,7 @@ impl super::command::Command for LsRemote { } if all_versions.is_empty() { - eprintln!( - "{}", - format!( - "No versions were found{}!", - match filter { - Some(filter) => format!(" with prefix {filter}"), - None => "".to_owned(), - } - ) - .red() - ); + eprintln!("{}", "No versions were found!".red()); } Ok(())