From 13118838af8287e20e9ca7fccf67c8c90e637927 Mon Sep 17 00:00:00 2001 From: Romain Bertrand Date: Sat, 5 Sep 2026 20:49:54 +0200 Subject: [PATCH 1/2] chore(deps): trim tokio and sea-orm to the features used tokio was on "full" for time, sync, spawn and join. sea-orm was on defaults, enabling bigdecimal, rust_decimal, time, chrono and serde_json integrations no entity uses, plus rustls for a local SQLite file. Drops 27 packages, 296 -> 279 crates. No source change. --- Cargo.lock | 318 ----------------------------------------------------- Cargo.toml | 6 +- 2 files changed, 3 insertions(+), 321 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 82fcd05..fdc8e10 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,17 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom 0.2.17", - "once_cell", - "version_check", -] - [[package]] name = "aho-corasick" version = "1.1.4" @@ -58,12 +47,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "arrayvec" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" - [[package]] name = "async-stream" version = "0.3.6" @@ -162,20 +145,6 @@ version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" -[[package]] -name = "bigdecimal" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d6867f1565b3aad85681f1015055b087fcfd840d6aeee6eee7f2da317603695" -dependencies = [ - "autocfg", - "libm", - "num-bigint", - "num-integer", - "num-traits", - "serde", -] - [[package]] name = "bit-set" version = "0.5.3" @@ -206,18 +175,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "bitvec" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddcec3d12c579d40898fe0a9a358a803c23e9c52ca3c425707f81c9436211837" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - [[package]] name = "block-buffer" version = "0.10.4" @@ -227,30 +184,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "borsh" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a88b7ea17d208c4193f2c1e6de3c35fe71f98c96982d5ced308bdcc749ff6e1f" -dependencies = [ - "borsh-derive", - "bytes", - "cfg_aliases", -] - -[[package]] -name = "borsh-derive" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8f347189c62a579b8cd5f80714efa178f52e461dc2e6d701d264f5ff22e566c" -dependencies = [ - "once_cell", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "bumpalo" version = "3.20.3" @@ -263,28 +196,6 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" -[[package]] -name = "bytecheck" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" -dependencies = [ - "bytecheck_derive", - "ptr_meta", - "simdutf8", -] - -[[package]] -name = "bytecheck_derive" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "bytemuck" version = "1.25.2" @@ -601,9 +512,6 @@ name = "deranged" version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" -dependencies = [ - "serde_core", -] [[package]] name = "derive_more" @@ -856,12 +764,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - [[package]] name = "futures-channel" version = "0.3.33" @@ -1001,15 +903,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash", -] - [[package]] name = "hashbrown" version = "0.15.5" @@ -1589,7 +1482,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0aeb26bf5e836cc1c341c8106051b573f1766dfa05aa87f0b98be5e51b02303" dependencies = [ "nix", - "serde", "winapi", ] @@ -1671,16 +1563,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "num-bigint" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" -dependencies = [ - "num-integer", - "num-traits", -] - [[package]] name = "num-bigint-dig" version = "0.8.6" @@ -1913,15 +1795,6 @@ dependencies = [ "pest", ] -[[package]] -name = "pgvector" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3673cba5b9a124916096a423b806a9f29620972c6c97b08db5f2053e9428b481" -dependencies = [ - "serde", -] - [[package]] name = "phf" version = "0.11.3" @@ -2043,15 +1916,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "proc-macro-crate" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" -dependencies = [ - "toml_edit", -] - [[package]] name = "proc-macro2" version = "1.0.107" @@ -2074,26 +1938,6 @@ dependencies = [ "yansi", ] -[[package]] -name = "ptr_meta" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" -dependencies = [ - "ptr_meta_derive", -] - -[[package]] -name = "ptr_meta_derive" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "quinn" version = "0.11.11" @@ -2172,12 +2016,6 @@ version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - [[package]] name = "rand" version = "0.8.7" @@ -2393,15 +2231,6 @@ version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" -[[package]] -name = "rend" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" -dependencies = [ - "bytecheck", -] - [[package]] name = "reqwest" version = "0.13.4" @@ -2457,35 +2286,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rkyv" -version = "0.7.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2297bf9c81a3f0dc96bc9521370b88f054168c29826a75e89c55ff196e7ed6a1" -dependencies = [ - "bitvec", - "bytecheck", - "bytes", - "hashbrown 0.12.3", - "ptr_meta", - "rend", - "rkyv_derive", - "seahash", - "tinyvec", - "uuid", -] - -[[package]] -name = "rkyv_derive" -version = "0.7.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d7b42d4b8d06048d3ac8db0eb31bcb942cbeb709f0b5f2b2ebde398d3038f5" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "rsa" version = "0.9.10" @@ -2506,23 +2306,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rust_decimal" -version = "1.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be2a24f50780bc85f09cc6ac299bdf1424302742d77221106859c9d8b102126a" -dependencies = [ - "arrayvec", - "borsh", - "bytes", - "num-traits", - "rand 0.8.7", - "rkyv", - "serde", - "serde_json", - "wasm-bindgen", -] - [[package]] name = "rustc-hash" version = "2.1.3" @@ -2559,7 +2342,6 @@ checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138" dependencies = [ "aws-lc-rs", "once_cell", - "ring", "rustls-pki-types", "rustls-webpki", "subtle", @@ -2683,24 +2465,17 @@ checksum = "2dc312fedd460a47ea563911761d254a84e7b51d8cc73ec92c929e78f33fa957" dependencies = [ "async-stream", "async-trait", - "bigdecimal", - "chrono", "derive_more", "futures-util", "log", - "mac_address", "ouroboros", - "pgvector", - "rust_decimal", "sea-orm-macros", "sea-query", "sea-query-binder", "serde", - "serde_json", "sqlx", "strum 0.26.3", "thiserror 2.0.20", - "time", "tracing", "url", "uuid", @@ -2726,13 +2501,8 @@ version = "0.32.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a5d1c518eaf5eda38e5773f902b26ab6d5e9e9e2bb2349ca6c64cf96f80448c" dependencies = [ - "bigdecimal", - "chrono", "inherent", "ordered-float", - "rust_decimal", - "serde_json", - "time", "uuid", ] @@ -2742,22 +2512,11 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0019f47430f7995af63deda77e238c17323359af241233ec768aba1faea7608" dependencies = [ - "bigdecimal", - "chrono", - "rust_decimal", "sea-query", - "serde_json", "sqlx", - "time", "uuid", ] -[[package]] -name = "seahash" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" - [[package]] name = "security-framework" version = "3.7.0" @@ -3006,9 +2765,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" dependencies = [ "base64", - "bigdecimal", "bytes", - "chrono", "crc", "crossbeam-queue", "either", @@ -3024,20 +2781,16 @@ dependencies = [ "memchr", "once_cell", "percent-encoding", - "rust_decimal", - "rustls", "serde", "serde_json", "sha2", "smallvec", "thiserror 2.0.20", - "time", "tokio", "tokio-stream", "tracing", "url", "uuid", - "webpki-roots 0.26.11", ] [[package]] @@ -3086,11 +2839,9 @@ checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" dependencies = [ "atoi", "base64", - "bigdecimal", "bitflags 2.13.1", "byteorder", "bytes", - "chrono", "crc", "digest", "dotenvy", @@ -3111,7 +2862,6 @@ dependencies = [ "percent-encoding", "rand 0.8.7", "rsa", - "rust_decimal", "serde", "sha1", "sha2", @@ -3119,7 +2869,6 @@ dependencies = [ "sqlx-core", "stringprep", "thiserror 2.0.20", - "time", "tracing", "uuid", "whoami", @@ -3133,10 +2882,8 @@ checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" dependencies = [ "atoi", "base64", - "bigdecimal", "bitflags 2.13.1", "byteorder", - "chrono", "crc", "dotenvy", "etcetera", @@ -3151,10 +2898,8 @@ dependencies = [ "log", "md-5", "memchr", - "num-bigint", "once_cell", "rand 0.8.7", - "rust_decimal", "serde", "serde_json", "sha2", @@ -3162,7 +2907,6 @@ dependencies = [ "sqlx-core", "stringprep", "thiserror 2.0.20", - "time", "tracing", "uuid", "whoami", @@ -3175,7 +2919,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" dependencies = [ "atoi", - "chrono", "flume", "futures-channel", "futures-core", @@ -3189,7 +2932,6 @@ dependencies = [ "serde_urlencoded", "sqlx-core", "thiserror 2.0.20", - "time", "tracing", "url", "uuid", @@ -3331,12 +3073,6 @@ dependencies = [ "libc", ] -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - [[package]] name = "termina" version = "0.3.3" @@ -3489,7 +3225,6 @@ dependencies = [ "powerfmt", "serde_core", "time-core", - "time-macros", ] [[package]] @@ -3498,16 +3233,6 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" -[[package]] -name = "time-macros" -version = "0.2.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" -dependencies = [ - "num-conv", - "time-core", -] - [[package]] name = "tinystr" version = "0.8.3" @@ -3632,18 +3357,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "toml_edit" -version = "0.25.13+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" -dependencies = [ - "indexmap", - "toml_datetime", - "toml_parser", - "winnow", -] - [[package]] name = "toml_parser" version = "1.1.3+spec-1.1.0" @@ -3923,7 +3636,6 @@ dependencies = [ "cfg-if", "once_cell", "rustversion", - "serde", "wasm-bindgen-macro", "wasm-bindgen-shared", ] @@ -3999,24 +3711,6 @@ dependencies = [ "rustls-pki-types", ] -[[package]] -name = "webpki-roots" -version = "0.26.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" -dependencies = [ - "webpki-roots 1.0.9", -] - -[[package]] -name = "webpki-roots" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "wezterm-bidi" version = "0.2.3" @@ -4353,9 +4047,6 @@ name = "winnow" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" -dependencies = [ - "memchr", -] [[package]] name = "wit-bindgen" @@ -4369,15 +4060,6 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - [[package]] name = "yansi" version = "1.0.1" diff --git a/Cargo.toml b/Cargo.toml index 78ab8c9..d5f8d69 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ name = "terminalist" path = "src/lib.rs" [dependencies] -tokio = { version = "1.50", features = ["full"] } +tokio = { version = "1.50", features = ["rt-multi-thread", "macros", "time", "sync"] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" anyhow = "1.0" @@ -29,9 +29,9 @@ async-trait = "0.1" thiserror = "2.0" ratatui = "0.30" crossterm = "0.29" -sea-orm = { version = "1.1", features = [ +sea-orm = { version = "1.1", default-features = false, features = [ "sqlx-sqlite", - "runtime-tokio-rustls", + "runtime-tokio", "macros", "with-uuid", ] } From 413df2e69bc10b0e821e5521e60329659f7da6ef Mon Sep 17 00:00:00 2001 From: Romain Bertrand Date: Sat, 5 Sep 2026 20:49:54 +0200 Subject: [PATCH 2/2] refactor(ui): drop uncalled Component hooks and helpers init, handle_events, on_focus and on_blur had no call sites; callers reach for handle_key_events directly. Also ScrollbarHelper::state, needs_scrollbar's visibility, and one unreferenced constant. --- src/constants.rs | 1 - src/ui/components/scrollbar_helper.rs | 7 +------ src/ui/core/component.rs | 18 +----------------- 3 files changed, 2 insertions(+), 24 deletions(-) diff --git a/src/constants.rs b/src/constants.rs index b98cc12..56b5e76 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -52,7 +52,6 @@ pub const ERROR_TASK_RESTORE_FAILED: &str = "❌ Failed to restore task"; pub const CONFIG_GENERATED: &str = "✅ Generated default configuration file"; pub const UI_NO_TASK_SELECTED_DUE_DATE: &str = "No task selected to set due date"; pub const UI_LOADING_DATA: &str = "Loading data"; -pub const UI_LOADING_DATA_FROM_STORAGE: &str = "Loading data from storage"; /// How long a success toast lingers before it fades on its own. pub const TOAST_TTL_SECS: u64 = 3; diff --git a/src/ui/components/scrollbar_helper.rs b/src/ui/components/scrollbar_helper.rs index ce4a207..69a38e9 100644 --- a/src/ui/components/scrollbar_helper.rs +++ b/src/ui/components/scrollbar_helper.rs @@ -58,7 +58,7 @@ impl ScrollbarHelper { /// /// # Returns /// `true` if scrollbar is needed, `false` otherwise - pub fn needs_scrollbar(total_items: usize, available_height: usize) -> bool { + fn needs_scrollbar(total_items: usize, available_height: usize) -> bool { total_items > available_height } @@ -120,9 +120,4 @@ impl ScrollbarHelper { f.render_stateful_widget(scrollbar, area, &mut self.state); } } - - /// Get an immutable reference to the internal scrollbar state. - pub fn state(&self) -> &ScrollbarState { - &self.state - } } diff --git a/src/ui/core/component.rs b/src/ui/core/component.rs index aa58c47..a481908 100644 --- a/src/ui/core/component.rs +++ b/src/ui/core/component.rs @@ -1,20 +1,8 @@ use super::actions::Action; -use crossterm::event::{Event, KeyEvent}; +use crossterm::event::KeyEvent; use ratatui::{layout::Rect, Frame}; pub trait Component { - fn init(&mut self) -> anyhow::Result<()> { - Ok(()) - } - - fn handle_events(&mut self, event: Option) -> Action { - if let Some(Event::Key(key)) = event { - self.handle_key_events(key) - } else { - Action::None - } - } - fn handle_key_events(&mut self, key: KeyEvent) -> Action; fn update(&mut self, action: Action) -> Action { @@ -23,8 +11,4 @@ pub trait Component { } fn render(&mut self, f: &mut Frame, rect: Rect); - - // Optional lifecycle methods - fn on_focus(&mut self) {} - fn on_blur(&mut self) {} }