From a98f254bb4e74dedc16a2630709be35798ad384a Mon Sep 17 00:00:00 2001 From: Adam Cooper Date: Sun, 20 Jul 2025 16:30:33 -0400 Subject: [PATCH] Read config from KDL config file --- Cargo.lock | 222 ++++++++++++++++++++++++++++++++++++++++++++++------ Cargo.toml | 2 + src/main.rs | 81 ++++++++++++++----- 3 files changed, 261 insertions(+), 44 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ca07aa5..7d7d6f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -71,6 +71,15 @@ dependencies = [ "opaque-debug", ] +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + [[package]] name = "android-tzdata" version = "0.1.1" @@ -86,6 +95,56 @@ dependencies = [ "libc", ] +[[package]] +name = "anstream" +version = "0.6.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.59.0", +] + [[package]] name = "anyhow" version = "1.0.95" @@ -213,7 +272,7 @@ checksum = "1b1244b10dcd56c92219da4e14caa97e312079e185f04ba3eea25061561dc0a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.104", ] [[package]] @@ -346,6 +405,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + [[package]] name = "concurrent-queue" version = "2.5.0" @@ -478,7 +543,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.104", ] [[package]] @@ -490,6 +555,29 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "env_filter" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "jiff", + "log", +] + [[package]] name = "errno" version = "0.3.10" @@ -625,7 +713,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.104", ] [[package]] @@ -927,7 +1015,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.104", ] [[package]] @@ -966,6 +1054,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + [[package]] name = "isahc" version = "0.9.14" @@ -995,6 +1089,30 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +[[package]] +name = "jiff" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + [[package]] name = "js-sys" version = "0.3.76" @@ -1078,9 +1196,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" dependencies = [ "value-bag", ] @@ -1110,7 +1228,7 @@ checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.104", ] [[package]] @@ -1237,6 +1355,12 @@ version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + [[package]] name = "opaque-debug" version = "0.3.1" @@ -1313,7 +1437,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.104", ] [[package]] @@ -1371,6 +1495,21 @@ dependencies = [ "universal-hash", ] +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + [[package]] name = "ppv-lite86" version = "0.2.20" @@ -1388,9 +1527,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.92" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] @@ -1484,6 +1623,35 @@ dependencies = [ "bitflags", ] +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + [[package]] name = "rustc-demangle" version = "0.1.24" @@ -1565,7 +1733,7 @@ checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.104", ] [[package]] @@ -1797,9 +1965,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.94" +version = "2.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "987bc0be1cdea8b10216bd06e2ca407d40b9543468fafd3ddfb02f36e77f71f3" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" dependencies = [ "proc-macro2", "quote", @@ -1814,7 +1982,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.104", ] [[package]] @@ -1834,7 +2002,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.104", ] [[package]] @@ -1911,7 +2079,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.104", ] [[package]] @@ -1934,7 +2102,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.104", ] [[package]] @@ -1994,7 +2162,9 @@ dependencies = [ name = "untagged-tagger" version = "0.1.0" dependencies = [ + "env_logger", "kdl", + "log", "tokio", "wallabag-api", "xdg", @@ -2024,6 +2194,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + [[package]] name = "value-bag" version = "1.10.0" @@ -2095,7 +2271,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.104", "wasm-bindgen-shared", ] @@ -2130,7 +2306,7 @@ checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.104", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2311,7 +2487,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.104", "synstructure", ] @@ -2333,7 +2509,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.104", ] [[package]] @@ -2353,7 +2529,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.104", "synstructure", ] @@ -2376,5 +2552,5 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.104", ] diff --git a/Cargo.toml b/Cargo.toml index 5815e39..7a3ca41 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,9 @@ version = "0.1.0" edition = "2021" [dependencies] +env_logger = "0.11.8" kdl = "6.3.4" +log = "0.4.27" tokio = { version = "1.42.0", features = ["full"] } wallabag-api = "0.4.3" xdg = "3.0.0" diff --git a/src/main.rs b/src/main.rs index 005ff1c..1cfeb42 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,42 +1,81 @@ extern crate xdg; -use kdl::{KdlDocument, KdlNode}; -use std::env; +use env_logger::Env; +use kdl::KdlDocument; +use log::debug; +use std::fs; +use std::process::Command; use wallabag_api::types::Config; use wallabag_api::Client; -/* -fn init() -> Result> { - debug!("[init] Entering function..."); - let xdg_dirs = xdg::BaseDirectories::with_prefix("untagged-tagger").unwrap(); + +fn get_config() -> Result> { + debug!("[get_config] Entering function..."); + let xdg_dirs = xdg::BaseDirectories::with_prefix("untagged-tagger"); let config_path = xdg_dirs.find_config_file("config.kdl").unwrap(); let config_file_contents = fs::read_to_string(config_path).unwrap(); - let config: KdlDocument = config_file_contents.parse().unwrap(); - debug!("[init] config: {:?}", config); - return Ok(config); -} -*/ -fn get_client() -> Client { - // TODO: There is config in the .config folder you can use. + let doc: KdlDocument = config_file_contents.parse().expect("failed to parse KDL"); + debug!("doc: {doc:?}"); + let root = doc.get("config").unwrap(); + debug!("root: {root:?}"); + let username = root + .children() + .unwrap() + .get("username") + .unwrap() + .get(0) + .unwrap() + .as_string() + .unwrap(); + let client_id = root + .children() + .unwrap() + .get("client_id") + .unwrap() + .get(0) + .unwrap() + .as_string() + .unwrap(); + let mut client_secret_cmd = + Command::new(xdg_dirs.find_config_file("get_client_secret.sh").unwrap()); + let client_secret = client_secret_cmd.output().unwrap().stdout; + let mut password_cmd = Command::new(xdg_dirs.find_config_file("get_password.sh").unwrap()); + let password = password_cmd.output().unwrap().stdout; + let base_url = root + .children() + .unwrap() + .get("base_url") + .unwrap() + .get(0) + .unwrap() + .as_string() + .unwrap(); let config = Config { - client_id: String::from("7_iwawqc3fc3k0k04s8cwwkkk8sgogkcw40swkgs4ocs8sk8wgo"), - client_secret: env::var("WALLABAG_CLIENT_SECRET").expect("not set"), - username: String::from("adam"), - password: env::var("WALLABAG_PASSWORD").expect("not set"), - base_url: String::from("https://wallabag.theadamcooper.com"), + username: username.to_string(), + password: String::from_utf8(password).unwrap(), + client_id: client_id.to_string(), + client_secret: String::from_utf8(client_secret).unwrap(), + base_url: base_url.to_string(), }; + debug!("[get_config] config: {config:?}"); + Ok(config) +} + +fn get_client() -> Client { + let config = get_config().unwrap(); let client = Client::new(config); - println!("{:?}", client); + debug!("{client:?}"); client } #[tokio::main] async fn main() -> std::io::Result<()> { - println!("Hello, world!"); + println!("The Untagged Tagger!"); + env_logger::Builder::from_env(Env::default()).init(); let mut client: Client = get_client(); let response = client.get_entries().await; match response { Err(e) => { - println!("Error: {}", e); + println!("Error: {e}"); } Ok(entries) => { for entry in entries {