From 01ad91b96ac48b687e4f4a785df2b758118be1e7 Mon Sep 17 00:00:00 2001 From: ivan-aksamentov Date: Thu, 7 Dec 2023 07:51:13 +0100 Subject: [PATCH] feat(cli): allow to search datasets by dataset shortcut --- .../src/cli/nextclade_dataset_list.rs | 9 +-------- packages_rs/nextclade/src/io/dataset.rs | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/packages_rs/nextclade-cli/src/cli/nextclade_dataset_list.rs b/packages_rs/nextclade-cli/src/cli/nextclade_dataset_list.rs index 6014492ed..f80bd5ce6 100644 --- a/packages_rs/nextclade-cli/src/cli/nextclade_dataset_list.rs +++ b/packages_rs/nextclade-cli/src/cli/nextclade_dataset_list.rs @@ -53,14 +53,7 @@ pub fn nextclade_dataset_list( }) .filter(|dataset| { if let Some(search) = &search { - [ - Some(dataset.path.as_str()), - dataset.name(), - dataset.ref_name(), - dataset.ref_accession(), - ] - .iter() - .any(|candidate| candidate.unwrap_or_default().contains(search)) + dataset.search_strings().any(|candidate| candidate.contains(search)) } else { true } diff --git a/packages_rs/nextclade/src/io/dataset.rs b/packages_rs/nextclade/src/io/dataset.rs index 9d9ee48a3..fc39c66d4 100644 --- a/packages_rs/nextclade/src/io/dataset.rs +++ b/packages_rs/nextclade/src/io/dataset.rs @@ -3,7 +3,7 @@ use crate::io::schema_version::{SchemaVersion, SchemaVersionParams}; use crate::o; use crate::utils::any::AnyType; use eyre::Report; -use itertools::Itertools; +use itertools::{chain, Itertools}; use schemars::JsonSchema; use semver::Version; use serde::{Deserialize, Serialize}; @@ -86,6 +86,20 @@ impl Dataset { self.attributes.get("name").and_then(AnyType::as_str_maybe) } + pub fn search_strings(&self) -> impl Iterator { + let names = [ + Some(self.path.as_str()), + self.name(), + self.ref_name(), + self.ref_accession(), + ] + .into_iter() + .flatten(); + + let shortcuts = self.shortcuts.iter().map(String::as_str); + + chain!(names, shortcuts) + } pub fn ref_name(&self) -> Option<&str> { self.attributes.get("reference name").and_then(AnyType::as_str_maybe) }