"wyz",
]
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
[[package]]
name = "bumpalo"
version = "3.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
+[[package]]
+name = "cpufeatures"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
+dependencies = [
+ "libc",
+]
+
[[package]]
name = "crossbeam-deque"
version = "0.8.4"
"winapi",
]
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
[[package]]
name = "cssparser"
version = "0.33.0"
"matches",
]
+[[package]]
+name = "derive-adhoc"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acd539187faa4741d0b5cee4bfe866b655cbe3cf497ecbe60db60883108e19fb"
+dependencies = [
+ "derive-adhoc-macros",
+ "heck",
+]
+
+[[package]]
+name = "derive-adhoc-macros"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0f27b6d3c8bc4e69b0e1091cfc38e3bb9e7b6d3dfc3703a1dd5c75d0a281e2a"
+dependencies = [
+ "heck",
+ "itertools 0.12.0",
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "sha3",
+ "strum",
+ "syn 2.0.43",
+ "void",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
[[package]]
name = "dtoa"
version = "1.0.9"
"byteorder",
]
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
[[package]]
name = "getrandom"
version = "0.2.11"
"wasm-bindgen",
]
+[[package]]
+name = "keccak"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654"
+dependencies = [
+ "cpufeatures",
+]
+
[[package]]
name = "lazy_static"
version = "1.4.0"
"chrono",
"clap",
"crossterm",
+ "derive-adhoc",
"email_address",
"html2text",
"itertools 0.12.0",
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+[[package]]
+name = "proc-macro-crate"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97dc5fea232fc28d2f597b37c4876b348a40e33f3b02cc975c8d006d78d94b1a"
+dependencies = [
+ "toml_datetime",
+ "toml_edit",
+]
+
[[package]]
name = "proc-macro2"
version = "1.0.71"
"serde",
]
+[[package]]
+name = "sha3"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60"
+dependencies = [
+ "digest",
+ "keccak",
+]
+
[[package]]
name = "signal-hook"
version = "0.3.17"
"tracing",
]
+[[package]]
+name = "toml_datetime"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+
+[[package]]
+name = "toml_edit"
+version = "0.20.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
+dependencies = [
+ "indexmap",
+ "toml_datetime",
+ "winnow",
+]
+
[[package]]
name = "tower-service"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
[[package]]
name = "unicode-bidi"
version = "0.3.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "65dd7eed29412da847b0f78bcec0ac98588165988a8cfe41d4ea1d429f8ccfff"
+[[package]]
+name = "void"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
+
[[package]]
name = "want"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+[[package]]
+name = "winnow"
+version = "0.5.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "818ce546a11a9986bc24f93d0cdf38a8a1a400f1473ea8c82e59f6e0ffab9249"
+dependencies = [
+ "memchr",
+]
+
[[package]]
name = "winreg"
version = "0.50.0"
chrono = { version = "0.4.31", features = ["serde"] }
clap = { version = "4.4.12", features = ["derive"] }
crossterm = "0.27.0"
+derive-adhoc = "0.8.1"
email_address = "0.2.4"
html2text = { version = "0.11.0", features = ["css"] }
itertools = "0.12.0"
use clap::Parser;
use std::process::ExitCode;
+#[macro_use]
+pub mod text;
+
pub mod activity_stack;
pub mod auth;
pub mod client;
pub mod options;
pub mod posting;
pub mod scan_re;
-pub mod text;
pub mod top_level_error;
pub mod tui;
pub mod types;
ActivityState, CursorPosition, LogicalAction, OurKey, OurKey::*,
};
use super::types::Visibility;
+use derive_adhoc::Adhoc;
struct YourOptionsMenu {
title: FileHeader,
c: YourOptionsMenuContents,
}
+#[derive(Adhoc)]
+#[derive_adhoc(MenuContents)]
struct YourOptionsMenuContents {
el_display_name: EditableMenuLine<String>, // N
cl_default_vis: CyclingMenuLine<Visibility>,
};
Ok(menu)
}
-}
-impl YourOptionsMenuContents {
- fn fix_widths(&mut self) -> (usize, usize) {
- let mut lmaxwid = 0;
- let mut rmaxwid = 0;
- self.el_display_name
- .check_widths(&mut lmaxwid, &mut rmaxwid);
- self.cl_default_vis.check_widths(&mut lmaxwid, &mut rmaxwid);
- self.el_default_language
- .check_widths(&mut lmaxwid, &mut rmaxwid);
- self.cl_default_sensitive
- .check_widths(&mut lmaxwid, &mut rmaxwid);
- self.cl_locked.check_widths(&mut lmaxwid, &mut rmaxwid);
- self.cl_bot.check_widths(&mut lmaxwid, &mut rmaxwid);
- self.cl_discoverable
- .check_widths(&mut lmaxwid, &mut rmaxwid);
- self.cl_hide_collections
- .check_widths(&mut lmaxwid, &mut rmaxwid);
- self.cl_indexable.check_widths(&mut lmaxwid, &mut rmaxwid);
-
- self.el_display_name.reset_widths();
- self.cl_default_vis.reset_widths();
- self.el_default_language.reset_widths();
- self.cl_default_sensitive.reset_widths();
- self.cl_locked.reset_widths();
- self.cl_bot.reset_widths();
- self.cl_discoverable.reset_widths();
- self.cl_hide_collections.reset_widths();
- self.cl_indexable.reset_widths();
-
- self.el_display_name.ensure_widths(lmaxwid, rmaxwid);
- self.cl_default_vis.ensure_widths(lmaxwid, rmaxwid);
- self.el_default_language.ensure_widths(lmaxwid, rmaxwid);
- self.cl_default_sensitive.ensure_widths(lmaxwid, rmaxwid);
- self.cl_locked.ensure_widths(lmaxwid, rmaxwid);
- self.cl_bot.ensure_widths(lmaxwid, rmaxwid);
- self.cl_discoverable.ensure_widths(lmaxwid, rmaxwid);
- self.cl_hide_collections.ensure_widths(lmaxwid, rmaxwid);
- self.cl_indexable.ensure_widths(lmaxwid, rmaxwid);
-
- (lmaxwid, rmaxwid)
- }
-}
-
-// XXXX join these two impl blocks again
-impl YourOptionsMenu {
fn submit(&self, client: &mut Client) -> LogicalAction {
let c = &self.c;
let details = AccountDetails {
use chrono::NaiveDateTime;
use chrono::{DateTime, Local, Utc};
use core::cmp::{max, min};
+use derive_adhoc::define_derive_adhoc;
use std::collections::{BTreeMap, HashSet};
use std::ops::Add;
use unicode_width::UnicodeWidthStr;
);
}
+pub trait MenuContents {
+ fn fix_widths(&mut self) -> (usize, usize);
+}
+
+define_derive_adhoc! {
+ MenuContents for struct, expect items =
+
+ impl<$tgens> MenuContents for $ttype where $twheres {
+ fn fix_widths(&mut self) -> (usize, usize) {
+ let mut lmaxwid = 0;
+ let mut rmaxwid = 0;
+ $( self.$fname.check_widths(&mut lmaxwid, &mut rmaxwid); )
+ $( self.$fname.reset_widths(); )
+ $( self.$fname.ensure_widths(lmaxwid, rmaxwid); )
+ (lmaxwid, rmaxwid)
+ }
+ }
+}
+
pub struct MenuKeypressLine {
keypress: Keypress,
lwid: usize,