diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2021-07-28 23:46:25 +0200 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2021-07-28 23:46:25 +0200 |
| commit | 97595d132fba62a84110e9df799c303b18d3b462 (patch) | |
| tree | 24b1d4302ec12aeb6d9471299d26e389ffd40e51 | |
| download | money-97595d132fba62a84110e9df799c303b18d3b462.tar.gz | |
initial commit
| -rw-r--r-- | cli/Cargo.lock | 123 | ||||
| -rw-r--r-- | cli/Cargo.toml | 11 | ||||
| -rw-r--r-- | cli/src/main.rs | 59 |
3 files changed, 193 insertions, 0 deletions
diff --git a/cli/Cargo.lock b/cli/Cargo.lock new file mode 100644 index 0000000..fb68e73 --- /dev/null +++ b/cli/Cargo.lock @@ -0,0 +1,123 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "itoa" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" + +[[package]] +name = "money-cli" +version = "0.1.0" +dependencies = [ + "rust_decimal", + "serde", + "serde_json", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + +[[package]] +name = "proc-macro2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rust_decimal" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5446d1cf2dfe2d6367c8b27f2082bdf011e60e76fa1fcd140047f535156d6e7" +dependencies = [ + "arrayvec", + "num-traits", + "serde", + "serde_json", +] + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "serde" +version = "1.0.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "963a7dbc9895aeac7ac90e74f34a5d5261828f79df35cbed41e10189d3804d43" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "syn" +version = "1.0.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1873d832550d4588c3dbc20f01361ab00bfe741048f71e3fecf145a7cc18b29c" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" diff --git a/cli/Cargo.toml b/cli/Cargo.toml new file mode 100644 index 0000000..1535896 --- /dev/null +++ b/cli/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "money-cli" +version = "0.1.0" +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +rust_decimal = { version = "1.15.0", features = ["serde-arbitrary-precision"] } +serde = { version = "1.0.126", features = ["derive"] } +serde_json = "1.0.64" diff --git a/cli/src/main.rs b/cli/src/main.rs new file mode 100644 index 0000000..a43bbca --- /dev/null +++ b/cli/src/main.rs @@ -0,0 +1,59 @@ +use rust_decimal::Decimal; +use serde::{Deserialize, Serialize}; +use std::convert::{AsRef, TryFrom}; +use std::fs; +use std::path::Path; + +type Account = String; +type Category = String; + +#[derive(Debug)] +#[derive(Deserialize, Serialize)] +enum TransactionKind { + Expense, + Income, + //TODO Transfer, +} + +#[derive(Debug)] +#[derive(Deserialize, Serialize)] +struct Transaction { + description: String, + category: Category, + amount: Decimal, + kind: TransactionKind, + from: Account, + to: Account, +} + +#[derive(Debug)] +#[derive(Deserialize, Serialize)] +struct Post { + transaction: Transaction, + removed: bool, +} + +impl Post { + fn new(transaction: Transaction) -> Self { + Self { + transaction, + removed: false, + } + } + + fn write<P: AsRef<Path>>(&self, p: &P) -> std::io::Result<()> { + fs::write(p, serde_json::to_string_pretty(self).unwrap()) //TODO control pretty or not + } +} + +fn main() { + let post = Post::new(Transaction { + description: "Test".to_string(), + category: "Mat".to_string(), + amount: Decimal::try_from(120.4_f64).unwrap(), + kind: TransactionKind::Expense, + from: "Kortkonto".to_string(), + to: "Coop Lambohov".to_string(), + }); + post.write(&"test").unwrap(); +} |
