diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2021-07-31 02:35:39 +0200 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2021-07-31 02:35:39 +0200 |
| commit | 10d6b82be501f219eb35b1cd94e1f0d461e9e165 (patch) | |
| tree | 197edf740b6b357a31c0c2dd9ec36970c74e90e6 /cli/src/main.rs | |
| parent | 15bade610a0c357cd6684deac81fe2db344f26f9 (diff) | |
| download | money-10d6b82be501f219eb35b1cd94e1f0d461e9e165.tar.gz | |
simple sorting
Diffstat (limited to 'cli/src/main.rs')
| -rw-r--r-- | cli/src/main.rs | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/cli/src/main.rs b/cli/src/main.rs index 254a5e2..c7b300b 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -44,6 +44,10 @@ enum Command { }, #[structopt(setting = AppSettings::AllowLeadingHyphen)] Show { + //TODO multiple sorts (sort iequals with later sorts) + #[structopt(long)] + sort: Option<SortTarget>, + filters: Vec<String>, }, } @@ -67,6 +71,25 @@ impl std::str::FromStr for ListTarget { #[derive(Debug)] #[derive(StructOpt)] +enum SortTarget { + Amount, + Date, //TODO ? +} + +impl std::str::FromStr for SortTarget { + type Err = String; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + match s { + "amount" => Ok(SortTarget::Amount), + "date" => Ok(SortTarget::Date), + _ => Err(format!("Unknown sort target: {:?}", s)), + } + } +} + +#[derive(Debug)] +#[derive(StructOpt)] struct Mn { #[structopt(subcommand)] command: Command, @@ -109,14 +132,18 @@ fn main() { println!("{}", store.categories().join("\n")); } Command::Show { - filters + sort, + filters, } => { let mut search = Search::new(store.transactions()); if !filters.is_empty() { search = search.parse(filters.join(" ")); } let mut transactions = search.get(); - transactions.sort_by(|t1, t2| t1.date.cmp(&t2.date)); + transactions.sort_by(|t1, t2| match sort { + Some(SortTarget::Amount) => t1.amount.cmp(&t2.amount), + Some(SortTarget::Date) | None => t1.date.cmp(&t2.date), + }); println!("{}", Table::new(transactions).with(Style::psql())); } } |
