Skip to content

Commit 05effea

Browse files
committed
release: 2.4.1
2 parents acfff73 + a3f37ca commit 05effea

27 files changed

+180
-174
lines changed

CREDITS.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
# Project Dependencies
22
Package: fyi
3-
Version: 2.4.0
3+
Version: 2.4.1
44
Target: x86_64-unknown-linux-gnu
5-
Generated: 2025-09-19 01:58:59 UTC
5+
Generated: 2025-10-30 19:59:41 UTC
66

77
| Package | Version | Author(s) | License |
88
| ---- | ---- | ---- | ---- |
9-
| [**argyle**](https://github.com/Blobfolio/argyle) | 0.13.0 | [Josh Stoik](mailto:josh@blobfolio.com) | WTFPL |
9+
| [**argyle**](https://github.com/Blobfolio/argyle) | 0.14.0 | [Josh Stoik](mailto:josh@blobfolio.com) | WTFPL |
1010
| [**dactyl**](https://github.com/Blobfolio/dactyl) | 0.13.1 | [Josh Stoik](mailto:josh@blobfolio.com) | WTFPL |
11-
| [**fyi_ansi**](https://github.com/Blobfolio/fyi) | 2.2.1 | [Josh Stoik](mailto:josh@blobfolio.com) | WTFPL |
12-
| [**fyi_msg**](https://github.com/Blobfolio/fyi) | 2.4.0 | [Josh Stoik](mailto:josh@blobfolio.com) | WTFPL |
13-
| [tz-rs](https://github.com/x-hgg-x/tz-rs) | 0.7.0 | x-hgg-x | MIT OR Apache-2.0 |
14-
| [**utc2k**](https://github.com/Blobfolio/utc2k) | 0.17.1 | [Josh Stoik](mailto:josh@blobfolio.com) | WTFPL |
11+
| [**fyi_ansi**](https://github.com/Blobfolio/fyi) | 2.2.2 | [Josh Stoik](mailto:josh@blobfolio.com) | WTFPL |
12+
| [**fyi_msg**](https://github.com/Blobfolio/fyi) | 2.4.1 | [Josh Stoik](mailto:josh@blobfolio.com) | WTFPL |
13+
| [tz-rs](https://github.com/x-hgg-x/tz-rs) | 0.7.1 | x-hgg-x | MIT OR Apache-2.0 |
14+
| [**utc2k**](https://github.com/Blobfolio/utc2k) | 0.18.0 | [Josh Stoik](mailto:josh@blobfolio.com) | WTFPL |
1515

1616
### Legend
1717

fyi/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "fyi"
3-
version = "2.4.0"
3+
version = "2.4.1"
44
license = "WTFPL"
55
authors = ["Josh Stoik <josh@blobfolio.com>"]
66
edition = "2024"
@@ -180,7 +180,7 @@ description = "The message!"
180180
subcommands = [ "confirm", "print", "aborted", "crunched", "debug", "done", "error", "found", "info", "notice", "review", "skipped", "success", "task", "warning" ]
181181

182182
[build-dependencies]
183-
argyle = "0.13.*"
183+
argyle = "0.14.*"
184184

185185
[build-dependencies.fyi_ansi]
186186
path = "../fyi_ansi"
@@ -190,7 +190,7 @@ features = [ "bin_kinds", "timestamps" ]
190190
path = "../fyi_msg"
191191

192192
[dependencies]
193-
argyle = "0.13.*"
193+
argyle = "0.14.*"
194194
dactyl = "0.13.*"
195195

196196
[dependencies.fyi_ansi]

fyi/build.rs

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22
# FYI: Build
33
*/
44

5-
use argyle::{
6-
FlagsBuilder,
7-
KeyWordsBuilder,
8-
};
5+
use argyle::FlagsBuilder;
96
use fyi_ansi::{
107
ansi,
118
csi,
@@ -44,9 +41,6 @@ fn main() {
4441
println!("cargo:rerun-if-changed=help");
4542
println!("cargo:rerun-if-env-changed=CARGO_PKG_VERSION");
4643

47-
// Build the CLI arguments.
48-
write_cli();
49-
5044
// Build the flags.
5145
write_flags();
5246

@@ -63,49 +57,6 @@ fn out_path(stub: &str) -> PathBuf {
6357
.join(stub)
6458
}
6559

66-
/// # Generate CLI arguments.
67-
fn write_cli() {
68-
// Main arguments first.
69-
let mut builder = KeyWordsBuilder::default();
70-
builder.push_commands(
71-
MsgKind::ALL.into_iter().filter_map(|k| {
72-
let cmd = k.command();
73-
if cmd.is_empty() { None }
74-
else { Some(cmd) }
75-
})
76-
);
77-
builder.push_keys([
78-
"-h", "--help",
79-
"-V", "--version",
80-
]);
81-
builder.save(out_path("argyle-kind.rs"));
82-
83-
// Blank arguments.
84-
builder = KeyWordsBuilder::default();
85-
builder.push_keys([
86-
"-h", "--help",
87-
"--stderr",
88-
]);
89-
builder.push_keys_with_values(["-c", "--count"]);
90-
builder.save(out_path("argyle-blank.rs"));
91-
92-
// Message arguments.
93-
builder = KeyWordsBuilder::default();
94-
builder.push_keys([
95-
"-h", "--help",
96-
"-i", "--indent",
97-
"--stderr",
98-
"-t", "--timestamp",
99-
"-y", "--yes",
100-
]);
101-
builder.push_keys_with_values([
102-
"-c", "--prefix-color",
103-
"-e", "--exit",
104-
"-p", "--prefix",
105-
]);
106-
builder.save(out_path("argyle-msg.rs"));
107-
}
108-
10960
/// # Write flags (program settings bools).
11061
fn write_flags() {
11162
FlagsBuilder::new("Flags")

fyi/src/cli.rs

Lines changed: 62 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22
# FYI: CLI
33
*/
44

5-
use argyle::{
6-
Argue,
7-
Argument,
8-
};
5+
use argyle::argue;
96
use crate::FyiError;
107
use dactyl::traits::BytesToUnsigned;
118
use fyi_msg::{
9+
CliCommandArg,
1210
Msg,
1311
MsgKind,
1412
};
@@ -22,6 +20,9 @@ use std::{
2220
// Flags generated by build.rs.
2321
include!(concat!(env!("OUT_DIR"), "/flags.rs"));
2422

23+
/// # Remaining CLI Args.
24+
type RemainingArgs = std::iter::Skip<std::env::ArgsOs>;
25+
2526

2627

2728
#[derive(Debug, Clone, Copy)]
@@ -65,43 +66,57 @@ impl Settings {
6566

6667

6768
/// # Parse Message Kind.
68-
pub(super) fn parse_kind() -> Result<MsgKind, FyiError> {
69-
let mut args = argyle::args().with_keywords(
70-
include!(concat!(env!("OUT_DIR"), "/argyle-kind.rs"))
71-
);
69+
pub(super) fn parse_kind() -> Result<(MsgKind, RemainingArgs), FyiError> {
70+
let mut args = CliCommandArg::args_os();
7271

7372
// The first result must be a subcommand or help/version flag.
7473
let kind = match args.next() {
75-
Some(Argument::Key("-V" | "--version")) => return Err(FyiError::PrintVersion),
76-
Some(Argument::Command(s)) => MsgKind::from(s.as_bytes()),
77-
_ => return Err(FyiError::PrintHelp(MsgKind::None)),
74+
Some(CliCommandArg::Blank) => MsgKind::Blank,
75+
Some(CliCommandArg::Confirm) => MsgKind::Confirm,
76+
Some(CliCommandArg::Custom) => MsgKind::Custom,
77+
Some(CliCommandArg::Aborted) => MsgKind::Aborted,
78+
Some(CliCommandArg::Crunched) => MsgKind::Crunched,
79+
Some(CliCommandArg::Debug) => MsgKind::Debug,
80+
Some(CliCommandArg::Done) => MsgKind::Done,
81+
Some(CliCommandArg::Error) => MsgKind::Error,
82+
Some(CliCommandArg::Found) => MsgKind::Found,
83+
Some(CliCommandArg::Info) => MsgKind::Info,
84+
Some(CliCommandArg::Notice) => MsgKind::Notice,
85+
Some(CliCommandArg::Review) => MsgKind::Review,
86+
Some(CliCommandArg::Skipped) => MsgKind::Skipped,
87+
Some(CliCommandArg::Success) => MsgKind::Success,
88+
Some(CliCommandArg::Task) => MsgKind::Task,
89+
Some(CliCommandArg::Warning) => MsgKind::Warning,
90+
Some(CliCommandArg::Version) => return Err(FyiError::PrintVersion),
91+
Some(CliCommandArg::Other(_) | CliCommandArg::OtherOs(_)) | None => return Err(FyiError::PrintHelp(MsgKind::None)),
7892
};
7993

80-
// Force the help screen if no kind was parsed.
81-
if matches!(kind, MsgKind::None) { Err(FyiError::PrintHelp(MsgKind::None)) }
82-
// Otherwise return it!
83-
else { Ok(kind) }
94+
Ok((kind, args.into_inner()))
8495
}
8596

8697
/// # Parse and Print Blanks!
87-
pub(super) fn parse_blank() -> Result<(), FyiError> {
88-
// The first arg is always skipped, the second we read earlier.
89-
let args = Argue::from(std::env::args_os().skip(2))
90-
.with_keywords(include!(concat!(env!("OUT_DIR"), "/argyle-blank.rs")));
98+
pub(super) fn parse_blank(args: RemainingArgs) -> Result<(), FyiError> {
99+
argue! {
100+
Help "-h" "--help",
101+
Stderr "--stderr",
102+
@options
103+
Count "-c" "--count",
104+
}
91105

106+
// The first arg is always skipped, the second we read earlier.
92107
let mut stderr = false;
93108
let mut count = NonZeroUsize::MIN;
94-
for arg in args {
109+
for arg in ArgumentIter::new(args) {
95110
match arg {
96-
Argument::Key("-h" | "--help") => return Err(FyiError::PrintHelp(MsgKind::Blank)),
97-
Argument::Key("--stderr") => { stderr = true; },
98-
Argument::KeyWithValue("-c" | "--count", s) =>
111+
Argument::Help => return Err(FyiError::PrintHelp(MsgKind::Blank)),
112+
Argument::Stderr => { stderr = true; },
113+
Argument::Count(s) =>
99114
if let Some(s) = NonZeroUsize::btou(s.trim().as_bytes()) {
100115
count = NonZeroUsize::max(count, s);
101116
},
102117

103118
// Nothing else is relevant here.
104-
_ => {},
119+
Argument::Other(_) | Argument::OtherOs(_) => {},
105120
}
106121
}
107122

@@ -114,35 +129,43 @@ pub(super) fn parse_blank() -> Result<(), FyiError> {
114129
}
115130

116131
/// # Parse Message.
117-
pub(super) fn parse_msg(kind: MsgKind) -> Result<(Msg, Settings), FyiError> {
118-
// The first arg is always skipped, the second we read earlier.
119-
let args = Argue::from(std::env::args_os().skip(2))
120-
.with_keywords(include!(concat!(env!("OUT_DIR"), "/argyle-msg.rs")));
132+
pub(super) fn parse_msg(kind: MsgKind, args: RemainingArgs)
133+
-> Result<(Msg, Settings), FyiError> {
134+
argue! {
135+
Help "-h" "--help",
136+
Indent "-i" "--indent",
137+
Stderr "--stderr",
138+
Timestamp "-t" "--timestamp",
139+
Yes "-y" "--yes",
140+
@options
141+
Color "-c" "--prefix-color",
142+
Prefix "-p" "--prefix",
143+
Exit "-e" "--exit",
144+
}
121145

122146
let mut msg = None;
123147
let mut prefix = String::new();
124148
let mut color = 199_u8;
125149
let mut flags = Settings::new();
126-
for arg in args {
150+
for arg in ArgumentIter::new(args) {
127151
match arg {
128-
Argument::Key("-h" | "--help") => return Err(FyiError::PrintHelp(kind)),
129-
Argument::Key("-i" | "--indent") => { flags.flags.set(Flags::Indent); },
130-
Argument::Key("--stderr") => { flags.flags.set(Flags::Stderr); },
131-
Argument::Key("-t" | "--timestamp") => { flags.flags.set(Flags::Timestamp); },
132-
Argument::Key("-y" | "--yes") => { flags.flags.set(Flags::Yes); },
152+
Argument::Help => return Err(FyiError::PrintHelp(kind)),
153+
Argument::Indent => { flags.flags.set(Flags::Indent); },
154+
Argument::Stderr => { flags.flags.set(Flags::Stderr); },
155+
Argument::Timestamp => { flags.flags.set(Flags::Timestamp); },
156+
Argument::Yes => { flags.flags.set(Flags::Yes); },
133157

134-
Argument::KeyWithValue("-c" | "--prefix-color", s) =>
158+
Argument::Color(s) =>
135159
if let Some(s) = u8::btou(s.trim().as_bytes()) { color = s; },
136-
Argument::KeyWithValue("-p" | "--prefix", s) => { prefix = s; },
137-
Argument::KeyWithValue("-e" | "--exit", s) =>
160+
Argument::Prefix(s) => { prefix = s; },
161+
Argument::Exit(s) =>
138162
if let Some(s) = u8::btou(s.trim().as_bytes()) { flags.exit = s.into(); },
139163

140164
Argument::Other(s) =>
141165
if msg.is_none() { msg.replace(s); }
142166
else { return Err(FyiError::InvalidCli(kind)); },
143167

144-
Argument::End(_) => {},
145-
_ => return Err(FyiError::InvalidCli(kind)),
168+
Argument::OtherOs(_) => return Err(FyiError::InvalidCli(kind)),
146169
}
147170
}
148171

fyi/src/main.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
clippy::format_push_string,
2525
clippy::get_unwrap,
2626
clippy::impl_trait_in_params,
27+
clippy::implicit_clone,
2728
clippy::lossy_float_literal,
2829
clippy::missing_assert_message,
2930
clippy::missing_docs_in_private_items,
@@ -33,7 +34,6 @@
3334
clippy::rest_pat_in_fully_bound_structs,
3435
clippy::semicolon_inside_block,
3536
clippy::str_to_string,
36-
clippy::string_to_string,
3737
clippy::todo,
3838
clippy::undocumented_unsafe_blocks,
3939
clippy::unneeded_field_pattern,
@@ -93,9 +93,9 @@ fn main() -> ExitCode {
9393
/// This lets us more easily bubble errors, which are printed and handled
9494
/// specially.
9595
fn main__() -> Result<(), FyiError> {
96-
let kind = cli::parse_kind()?;
97-
if matches!(kind, MsgKind::Blank) { return cli::parse_blank(); }
98-
let (msg, flags) = cli::parse_msg(kind)?;
96+
let (kind, args) = cli::parse_kind()?;
97+
if matches!(kind, MsgKind::Blank) { return cli::parse_blank(args); }
98+
let (msg, flags) = cli::parse_msg(kind, args)?;
9999

100100
if matches!(kind, MsgKind::Confirm) {
101101
return

fyi_ansi/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "fyi_ansi"
3-
version = "2.2.1"
3+
version = "2.2.2"
44
authors = ["Josh Stoik <josh@blobfolio.com>"]
55
edition = "2024"
66
rust-version = "1.87"

fyi_ansi/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ assert_eq!(strike!("I'm struck!"), "\x1b[9mI'm struck!\x1b[0m");
6565
clippy::format_push_string,
6666
clippy::get_unwrap,
6767
clippy::impl_trait_in_params,
68+
clippy::implicit_clone,
6869
clippy::lossy_float_literal,
6970
clippy::missing_assert_message,
7071
clippy::missing_docs_in_private_items,
@@ -74,7 +75,6 @@ assert_eq!(strike!("I'm struck!"), "\x1b[9mI'm struck!\x1b[0m");
7475
clippy::rest_pat_in_fully_bound_structs,
7576
clippy::semicolon_inside_block,
7677
clippy::str_to_string,
77-
clippy::string_to_string,
7878
clippy::todo,
7979
clippy::undocumented_unsafe_blocks,
8080
clippy::unneeded_field_pattern,
@@ -292,8 +292,8 @@ mod macros {
292292
// Close with a generic (full) reset.
293293
(($($style:tt)+) $($content:expr),+ $(,)?) => (
294294
::std::concat!(
295-
csi!($($style)+),
296-
$($content),+,
295+
csi!($( $style )+),
296+
$( $content, )+
297297
csi!(),
298298
)
299299
);

fyi_msg/Cargo.toml

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
[package]
22
name = "fyi_msg"
3-
version = "2.4.0"
3+
version = "2.4.1"
44
authors = ["Josh Stoik <josh@blobfolio.com>"]
55
edition = "2024"
6-
rust-version = "1.88"
6+
rust-version = "1.90"
77
description = "Simple ANSI-formatted, prefixed messages for console printing."
88
license = "WTFPL"
99
repository = "https://github.com/Blobfolio/fyi"
@@ -17,6 +17,10 @@ features = [ "fitted", "progress", "signals", "timestamps" ]
1717
default-target = "x86_64-unknown-linux-gnu"
1818
targets = [ "x86_64-unknown-linux-gnu", "x86_64-apple-darwin" ]
1919

20+
[dependencies.argyle]
21+
version = "0.14.*"
22+
optional = true
23+
2024
[dependencies.dactyl]
2125
version = "0.13.*"
2226
optional = true
@@ -39,7 +43,7 @@ version = "0.2.*"
3943
optional = true
4044

4145
[dependencies.utc2k]
42-
version = "0.17.*"
46+
version = "0.18.*"
4347
features = [ "local" ]
4448
optional = true
4549

@@ -107,4 +111,4 @@ signals_sigint = [ "progress", "signal-hook" ]
107111
signals = [ "signals_sigint", "signals_sigwinch" ]
108112

109113
# INTERNAL: used by the accompanying "fyi" binary.
110-
bin_kinds = []
114+
bin_kinds = [ "argyle" ]

0 commit comments

Comments
 (0)