pomsky-bin 0.12.0

Compile pomsky expressions, a new regular expression language
Documentation
use std::{fmt, string::FromUtf8Error};

#[derive(Debug)]
pub(crate) enum ParseArgsError {
    Lexopt(lexopt::Error),
    StdinUtf8(FromUtf8Error),
    UnexpectedTwice(&'static str),
    NoInput,
    NoPath,
    InputAndPath,
    UnknownFlavor(String),
    UnknownEngine(String),
    UnknownList(String),
    WarningsNoEquals(String),
    WarningsNoZero(String),
    WarningsNotAllowed(String),
    Other(String),
}

impl From<lexopt::Error> for ParseArgsError {
    fn from(e: lexopt::Error) -> Self {
        ParseArgsError::Lexopt(e)
    }
}

impl fmt::Display for ParseArgsError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        match self {
            ParseArgsError::Lexopt(error) => write!(f, "{error}"),
            ParseArgsError::StdinUtf8(e) => write!(f, "Could not parse stdin: {e}"),
            ParseArgsError::UnexpectedTwice(option) => write!(
                f,
                "The argument `{option}` was provided more than once, \
                    but cannot be used multiple times"
            ),
            ParseArgsError::UnknownFlavor(flavor) => write!(
                f,
                "`{flavor}` isn't a valid flavor\n\
                    possible values: pcre, python, java, javascript, dotnet, ruby, rust"
            ),
            ParseArgsError::UnknownEngine(engine) => {
                write!(f, "`{engine}` isn't a valid regex engine\npossible values: pcre2, rust")
            }
            ParseArgsError::UnknownList(list) => {
                write!(f, "`{list}` isn't a valid list\npossible values: shorthands")
            }
            ParseArgsError::NoInput => write!(f, "No input provided"),
            ParseArgsError::NoPath => write!(f, "No file path provided"),
            ParseArgsError::InputAndPath => {
                write!(f, "You can only provide an input or a path, but not both")
            }
            ParseArgsError::WarningsNoEquals(warning) => write!(
                f,
                "`{warning}` contains no `=`\n\
                    try `-W{warning}=0` to disable {warning} warnings"
            ),
            ParseArgsError::WarningsNoZero(warning) => {
                write!(f, "warnings can only be disabled, try `-W{warning}=0`")
            }
            ParseArgsError::WarningsNotAllowed(warning) => {
                write!(f, "`{warning}` diagnostic kind cannot be disabled")
            }
            ParseArgsError::Other(msg) => f.write_str(msg),
        }
    }
}