summaryrefslogtreecommitdiffstats
path: root/cli/src/main.rs
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-07-31 02:35:39 +0200
committerGustav Sörnäs <gustav@sornas.net>2021-07-31 02:35:39 +0200
commit10d6b82be501f219eb35b1cd94e1f0d461e9e165 (patch)
tree197edf740b6b357a31c0c2dd9ec36970c74e90e6 /cli/src/main.rs
parent15bade610a0c357cd6684deac81fe2db344f26f9 (diff)
downloadmoney-10d6b82be501f219eb35b1cd94e1f0d461e9e165.tar.gz
simple sorting
Diffstat (limited to 'cli/src/main.rs')
-rw-r--r--cli/src/main.rs31
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()));
}
}