Add argument parsing for config file

master
Nick Krichevsky 2022-10-16 21:11:24 -04:00
parent f3d73cb461
commit 91e2186466
4 changed files with 91 additions and 8 deletions

83
Cargo.lock generated
View File

@ -192,6 +192,17 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a"
[[package]]
name = "atty"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
dependencies = [
"hermit-abi",
"libc",
"winapi",
]
[[package]]
name = "autocfg"
version = "1.1.0"
@ -295,6 +306,43 @@ dependencies = [
"winapi",
]
[[package]]
name = "clap"
version = "4.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6bf8832993da70a4c6d13c581f4463c2bdda27b9bf1c5498dc4365543abe6d6f"
dependencies = [
"atty",
"bitflags",
"clap_derive",
"clap_lex",
"once_cell",
"strsim",
"termcolor",
]
[[package]]
name = "clap_derive"
version = "4.0.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c42f169caba89a7d512b5418b09864543eeb4d497416c917d7137863bd2076ad"
dependencies = [
"heck",
"proc-macro-error",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "clap_lex"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8"
dependencies = [
"os_str_bytes",
]
[[package]]
name = "concurrent-queue"
version = "1.2.2"
@ -700,6 +748,12 @@ version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
[[package]]
name = "heck"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
[[package]]
name = "hermit-abi"
version = "0.1.19"
@ -1075,9 +1129,9 @@ dependencies = [
[[package]]
name = "once_cell"
version = "1.10.0"
version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
[[package]]
name = "openssl"
@ -1124,6 +1178,12 @@ dependencies = [
"vcpkg",
]
[[package]]
name = "os_str_bytes"
version = "6.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff"
[[package]]
name = "ouroboros"
version = "0.15.4"
@ -1350,11 +1410,11 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
[[package]]
name = "proc-macro2"
version = "1.0.37"
version = "1.0.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1"
checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
dependencies = [
"unicode-xid",
"unicode-ident",
]
[[package]]
@ -1784,6 +1844,12 @@ dependencies = [
"quote",
]
[[package]]
name = "strsim"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "syn"
version = "1.0.92"
@ -2025,6 +2091,12 @@ version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
[[package]]
name = "unicode-ident"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
[[package]]
name = "unicode-linebreak"
version = "0.1.2"
@ -2324,6 +2396,7 @@ dependencies = [
"async-std",
"async-trait",
"chrono",
"clap",
"derive-getters",
"fern",
"futures",

View File

@ -26,6 +26,7 @@ reqwest = { version = "0.11.12", features = ["json"] }
url = "2.2"
anyhow = "1.0"
uuid = { version = "1.2", features = ["v4"] }
clap = { version = "4.0", features = ["derive"] }
# For annoying reasons, we must pin exactly the same versions as async-imap if we want to use
# their types.

View File

@ -17,7 +17,7 @@ YNABifier, while functional, is still a bit of a work in progress. There are som
Planned improvements:
- [ ] Streamline the configuration process to not require fetching YNAB IDs by hand.
- [x] IMAP sessions need to be more properly cleaned up.
- [ ] Various QoL features, such as allowing alternate configuration paths
- [x] Various QoL features, such as allowing alternate configuration paths
## Setup

View File

@ -2,6 +2,7 @@
extern crate log;
use async_trait::async_trait;
use clap::Parser;
use futures::{select, FutureExt};
use futures::{stream::StreamExt, Future};
use log::LevelFilter;
@ -10,16 +11,24 @@ use ynabifier::task::{Handle, Join};
use std::{fs::File, process, sync::Arc};
use tokio::runtime::Runtime;
use ynabifier::parse::Transaction;
use ynabifier::{
config::{Config, YNABAccount},
parse::Transaction,
task::{Cancel, Spawn, SpawnError},
ynab::Client as YNABClient,
CloseableStream, Message,
};
#[derive(Parser, Debug)]
struct Args {
#[arg(short, default_value = "config.yml")]
config_file: String,
}
fn main() {
let config_res = load_config("config.yml");
let args = Args::parse();
let config_res = load_config(&args.config_file);
if let Err(err) = config_res {
eprintln!("Failed to load configuration: {err}");
process::exit(1);