started cli

This commit is contained in:
Ponj 2024-08-21 01:34:56 +02:00
parent 5f4ffa4705
commit 2ac18bb640
Signed by: p6nj
GPG key ID: CEAB625B75A836B2
3 changed files with 64 additions and 0 deletions

15
Cargo.toml Normal file
View file

@ -0,0 +1,15 @@
[package]
name = "bng"
version = "0.1.0"
edition = "2021"
[dependencies]
anyhow = "1.0"
clap = { version = "4.5", features = ["derive"] }
fasteval = "0.2.4"
tinyaudio = { version = "0.1", optional = true }
[features]
default = ["play", "save"]
play = ["dep:tinyaudio"]
save = []

39
src/cli.rs Normal file
View file

@ -0,0 +1,39 @@
use std::{fs::read_to_string, ops::Deref, path::Path, str::FromStr};
use anyhow::{Context, Error};
use clap::Parser;
#[derive(Parser)]
pub(super) struct Args {
#[arg(short, long, value_parser = Instrument::from_str)]
instrument: Instrument,
}
impl Args {
pub(super) fn instrument(&self) -> &<Instrument as Deref>::Target {
&self.instrument
}
}
#[derive(Clone)]
pub(super) struct Instrument(String);
impl FromStr for Instrument {
type Err = Error;
fn from_str(value: &str) -> Result<Self, Self::Err> {
let maybe_a_path = Path::new(&value);
Ok(Instrument(if maybe_a_path.is_file() {
read_to_string(maybe_a_path)
.context("you gave me the path of a real file but reading it is hard!")?
} else {
value.to_owned() // hope it's good
}))
}
}
impl Deref for Instrument {
type Target = <String as Deref>::Target;
fn deref(&self) -> &Self::Target {
&self.0
}
}

10
src/main.rs Normal file
View file

@ -0,0 +1,10 @@
use anyhow::Result;
use clap::Parser;
mod cli;
fn main() -> Result<()> {
let args = cli::Args::try_parse()?;
println!("got: {}", args.instrument());
Ok(())
}