use anstyle::{Color, RgbColor, Style};
use clap::Parser;
use clap::builder::Styles;
use std::path::PathBuf;
const HOT_PINK: Color = Color::Rgb(RgbColor(0xff, 0x2a, 0x6d)); const ELECTRIC_CYAN: Color = Color::Rgb(RgbColor(0x05, 0xd9, 0xe8)); const NEON_MAGENTA: Color = Color::Rgb(RgbColor(0xff, 0x71, 0xce)); const ELECTRIC_PURPLE: Color = Color::Rgb(RgbColor(0xb9, 0x67, 0xff)); const SUNSET_YELLOW: Color = Color::Rgb(RgbColor(0xff, 0xd3, 0x19)); const LASER_RED: Color = Color::Rgb(RgbColor(0xff, 0x00, 0x6e));
pub fn neon_styles() -> Styles {
Styles::styled()
.header(Style::new().bold().fg_color(Some(HOT_PINK)))
.usage(Style::new().bold().fg_color(Some(ELECTRIC_CYAN)))
.literal(Style::new().bold().fg_color(Some(NEON_MAGENTA)))
.placeholder(Style::new().fg_color(Some(ELECTRIC_PURPLE)))
.error(Style::new().bold().fg_color(Some(LASER_RED)))
.valid(Style::new().bold().fg_color(Some(ELECTRIC_CYAN)))
.invalid(Style::new().bold().fg_color(Some(SUNSET_YELLOW)))
}
#[derive(Debug, Parser)]
#[command(
name = "smolsonic",
version,
about = "A tiny Subsonic-compatible music server",
styles = neon_styles(),
)]
pub struct Cli {
#[arg(short, long, default_value = "smolsonic.toml")]
pub config: PathBuf,
#[arg(long)]
pub no_scan: bool,
}
pub const BANNER: &str = r#"
_ _
___ _ __ ___ ___ | |___ ___ _ __ (_) ___
/ __| '_ ` _ \ / _ \| / __|/ _ \| '_ \ | |/ __|
\__ \ | | | | | (_) | \__ \ (_) | | | || | (__
|___/_| |_| |_|\___/|_|___/\___/|_| |_||_|\___|
a tiny Subsonic server in Rust
"#;
pub fn print_banner(host: &str, port: u16, music_dir: &std::path::Path) {
let hot_pink = "\x1b[1;38;2;255;42;109m"; let electric_cyan = "\x1b[1;38;2;5;217;232m"; let neon_magenta = "\x1b[1;38;2;255;113;206m"; let electric_purple = "\x1b[1;38;2;185;103;255m"; let sunset_yellow = "\x1b[1;38;2;255;211;25m"; let dim = "\x1b[2m";
let reset = "\x1b[0m";
print!("{hot_pink}{BANNER}{reset}");
println!(
" {electric_cyan}listening{reset} {dim}→{reset} {neon_magenta}http://{host}:{port}{reset}"
);
println!(
" {electric_cyan}library {reset} {dim}→{reset} {electric_purple}{}{reset}",
music_dir.display()
);
let _ = sunset_yellow;
println!();
}