full cli args

This commit is contained in:
Ponj 2024-08-24 14:52:55 +02:00
parent 2ac18bb640
commit e5c360b791
Signed by: p6nj
GPG key ID: 6FED68D87C479A59
2 changed files with 45 additions and 6 deletions

View file

@ -1,21 +1,59 @@
use std::{fs::read_to_string, ops::Deref, path::Path, str::FromStr};
use std::{
fs::read_to_string,
ops::Deref,
path::{Path, PathBuf},
str::FromStr,
};
use anyhow::{Context, Error};
use clap::Parser;
#[derive(Parser)]
#[cfg_attr(debug_assertions, derive(Debug))]
pub(super) struct Args {
#[arg(short, long, value_parser = Instrument::from_str)]
instrument: Instrument,
instrument: Option<Instrument>,
#[arg(short, long)]
output: Option<PathBuf>,
score: Score,
}
impl Args {
pub(super) fn instrument(&self) -> &<Instrument as Deref>::Target {
&self.instrument
pub(super) fn instrument(&self) -> Option<&<Instrument as Deref>::Target> {
self.instrument.as_deref()
}
pub(super) fn output(&self) -> Option<&PathBuf> {
self.output.as_ref()
}
}
#[derive(Clone)]
#[cfg_attr(debug_assertions, derive(Debug))]
pub(super) struct Score(String);
impl FromStr for Score {
type Err = Error;
fn from_str(value: &str) -> Result<Self, Self::Err> {
let maybe_a_path = Path::new(&value);
Ok(Score(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 a good one
}))
}
}
impl Deref for Score {
type Target = <String as Deref>::Target;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[derive(Clone)]
#[cfg_attr(debug_assertions, derive(Debug))]
pub(super) struct Instrument(String);
impl FromStr for Instrument {
@ -26,7 +64,7 @@ impl FromStr for Instrument {
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
value.to_owned() // hope it's a good one
}))
}
}

View file

@ -5,6 +5,7 @@ mod cli;
fn main() -> Result<()> {
let args = cli::Args::try_parse()?;
println!("got: {}", args.instrument());
#[cfg(debug_assertions)]
println!("{:?}", args);
Ok(())
}