summaryrefslogtreecommitdiffstats
path: root/cli/src
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-07-29 15:42:12 +0200
committerGustav Sörnäs <gustav@sornas.net>2021-07-29 16:25:47 +0200
commit750ac56977cd08d850cf902c8c8070512ecf484f (patch)
treea8a13634c0bc2dfe653ab52410c7c1a2f4c18dd1 /cli/src
parentcf79a3180282f08a6165f4b88f52b78a14b9c688 (diff)
downloadmoney-750ac56977cd08d850cf902c8c8070512ecf484f.tar.gz
table output and show command
Diffstat (limited to 'cli/src')
-rw-r--r--cli/src/main.rs9
-rw-r--r--cli/src/transaction.rs12
2 files changed, 18 insertions, 3 deletions
diff --git a/cli/src/main.rs b/cli/src/main.rs
index 071e251..55279b1 100644
--- a/cli/src/main.rs
+++ b/cli/src/main.rs
@@ -3,6 +3,7 @@ use rust_decimal::Decimal;
use std::path::PathBuf;
use std::str::FromStr;
use structopt::StructOpt;
+use tabled::{Style, Table};
mod search;
mod store;
@@ -39,7 +40,8 @@ enum Command {
},
List {
target: ListTarget,
- }
+ },
+ Show,
}
#[derive(Debug)]
@@ -70,9 +72,7 @@ fn main() {
let mut store = Store::open(PathBuf::from("store")).unwrap();
let search = Search::new(store.transactions().iter().collect());
- println!("{:?}", search.get());
let search = search.subtract(Constraint::Category("a".to_string()));
- println!("{:?}", search.get());
let args = Mn::from_args();
eprintln!("{:?}", args);
@@ -107,5 +107,8 @@ fn main() {
} => {
println!("{}", store.categories().join("\n"));
}
+ Command::Show => {
+ println!("{}", Table::new(store.transactions()).with(Style::psql()));
+ }
}
}
diff --git a/cli/src/transaction.rs b/cli/src/transaction.rs
index 117edfb..8e33aa4 100644
--- a/cli/src/transaction.rs
+++ b/cli/src/transaction.rs
@@ -2,10 +2,12 @@ use chrono::naive::NaiveDate;
use rust_decimal::Decimal;
use serde::{Deserialize, Serialize};
use std::convert::AsRef;
+use std::fmt;
use std::fs;
use std::hash::{Hash, Hasher};
use std::path::Path;
use structopt::StructOpt;
+use tabled::Tabled;
use twox_hash::XxHash64;
pub(crate) type Account = String;
@@ -33,9 +35,19 @@ impl std::str::FromStr for TransactionKind {
}
}
+impl fmt::Display for TransactionKind {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ match self {
+ TransactionKind::Expense => write!(f, "expense"),
+ TransactionKind::Income => write!(f, "income"),
+ }
+ }
+}
+
#[derive(Debug)]
#[derive(Hash)]
#[derive(Deserialize, Serialize)]
+#[derive(Tabled)]
pub struct Transaction {
pub description: String,
pub date: NaiveDate,