starkli 0.1.8

Starkli (/ˈstɑːrklaɪ/), a blazing fast CLI tool for Starknet powered by starknet-rs
use std::path::PathBuf;

use clap::{builder::TypedValueParser, error::ErrorKind, Arg, Command, Error};

#[derive(Clone)]
pub struct ExpandedPathbufParser;

impl TypedValueParser for ExpandedPathbufParser {
    type Value = PathBuf;

    fn parse_ref(
        &self,
        cmd: &Command,
        _arg: Option<&Arg>,
        value: &std::ffi::OsStr,
    ) -> Result<Self::Value, Error> {
        if value.is_empty() {
            Err(cmd.clone().error(ErrorKind::InvalidValue, "empty path"))
        } else {
            let path = match value.to_str() {
                Some(value) => PathBuf::from(shellexpand::tilde(value).into_owned()),
                None => PathBuf::from(value),
            };

            Ok(path)
        }
    }
}