diff options
Diffstat (limited to 'vendor/anstyle-wincon/examples/set-wincon.rs')
-rw-r--r-- | vendor/anstyle-wincon/examples/set-wincon.rs | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/vendor/anstyle-wincon/examples/set-wincon.rs b/vendor/anstyle-wincon/examples/set-wincon.rs new file mode 100644 index 0000000..6febb0a --- /dev/null +++ b/vendor/anstyle-wincon/examples/set-wincon.rs @@ -0,0 +1,58 @@ +#![cfg_attr(not(windows), allow(dead_code))] + +#[cfg(not(windows))] +fn main() { + panic!("unsupported"); +} + +#[cfg(windows)] +fn main() -> Result<(), lexopt::Error> { + use anstyle_wincon::WinconStream as _; + + let args = Args::parse()?; + let stdout = std::io::stdout(); + let mut stdout = stdout.lock(); + + let fg = args.fg.and_then(|c| c.into_ansi()); + let bg = args.bg.and_then(|c| c.into_ansi()); + + let _ = stdout.write_colored(fg, bg, "".as_bytes()); + + std::mem::forget(stdout); + + Ok(()) +} + +#[derive(Default)] +struct Args { + fg: Option<anstyle::Ansi256Color>, + bg: Option<anstyle::Ansi256Color>, +} + +impl Args { + fn parse() -> Result<Self, lexopt::Error> { + use lexopt::prelude::*; + + let mut res = Args::default(); + + let mut args = lexopt::Parser::from_env(); + while let Some(arg) = args.next()? { + match arg { + Long("fg") => { + res.fg = Some( + args.value()? + .parse_with(|s| s.parse::<u8>().map(anstyle::Ansi256Color))?, + ); + } + Long("bg") => { + res.fg = Some( + args.value()? + .parse_with(|s| s.parse::<u8>().map(anstyle::Ansi256Color))?, + ); + } + _ => return Err(arg.unexpected()), + } + } + Ok(res) + } +} |