diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 30 | ||||
| -rw-r--r-- | src/mikuart.rs | 15 |
2 files changed, 31 insertions, 14 deletions
diff --git a/src/main.rs b/src/main.rs index e4d1b6e..e0ffba7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,28 +1,34 @@ +use clap::Parser; use crossterm::terminal::size; -use std::env; use unicode_width::UnicodeWidthStr; mod mikuart; use mikuart::get_miku_art; -fn main() -> Result<(), Box<dyn std::error::Error>> { - let args: Vec<String> = env::args().collect(); +#[derive(Parser)] +#[command(version, about, long_about = None)] +struct Args { + /// Text to display in the speech bubble + text: String, - if args.len() == 1 { - println!("Usage: mikusays <text>"); - println!("Example: mikusays \"Hello, World!\""); - return Ok(()); - } + /// Style of the Miku art. A random one is chosen if not specified + #[arg(short, long)] + style: Option<i32>, +} + +fn main() -> Result<(), Box<dyn std::error::Error>> { + let args = Args::parse(); - let text = args[1..].join(" "); - draw_miku_says(&text)?; + let text = args.text; + let style = args.style.unwrap_or(-1); // Default to -1 to select a random style + draw_miku_says(&text, style)?; Ok(()) } -fn draw_miku_says(text: &str) -> Result<(), Box<dyn std::error::Error>> { +fn draw_miku_says(text: &str, style: i32) -> Result<(), Box<dyn std::error::Error>> { let speech_bubble_lines = get_speech_bubble_lines(text); - let miku_art = get_miku_art(); + let miku_art = get_miku_art(style); let (window_width, window_height) = size()?; let available_width = window_width as usize; diff --git a/src/mikuart.rs b/src/mikuart.rs index 5ba1849..44915b6 100644 --- a/src/mikuart.rs +++ b/src/mikuart.rs @@ -3,7 +3,7 @@ use rand::Rng; -pub fn get_miku_art() -> Vec<&'static str> { +pub fn get_miku_art(style: i32) -> Vec<&'static str> { let mut rng = rand::rng(); let styles = vec![ //MARK: small art @@ -504,6 +504,17 @@ pub fn get_miku_art() -> Vec<&'static str> { ], ]; - let selected_style = rng.random_range(0..styles.len()); + if style > 0 && style as usize >= styles.len() { + panic!( + "Style {} does not exist! Chooese one below {}", + style, + styles.len() + ); + } + let selected_style = if style < 0 { + rng.random_range(0..styles.len()) + } else { + style as usize + }; styles[selected_style].clone() } |
