aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs30
-rw-r--r--src/mikuart.rs15
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()
}