regular 0.1.1

Regular Expression Manipulation and Analysis
Documentation
#![deny(
    bad_style,
    dead_code,
    improper_ctypes,
    missing_debug_implementations,
    no_mangle_generic_items,
    non_shorthand_field_patterns,
    overflowing_literals,
    path_statements,
    patterns_in_fns_without_body,
    private_in_public,
    unconditional_recursion,
    unreachable_pub,
    unused,
    unused_allocation,
    unused_comparisons,
    unused_parens,
    while_true,
    clippy::expect_used
)]
#![forbid(unsafe_code)]
#![doc = include_str!("../README.md")]

use std::process::ExitCode;

use anyhow::Result;
use clap::Parser;
use regular::{enumerate, example};

fn main() -> Result<ExitCode> {
    let args = Opt::parse();

    match args {
        Opt::Example(o) => example(o.expression),
        Opt::Enumerate(o) => enumerate(o.expression),
    }?;

    Ok(ExitCode::SUCCESS)
}

#[derive(Parser, Debug)]
struct ExampleOpt {
    /// A regular expression
    expression: String,
}

#[derive(Parser, Debug)]
struct EnumerateOpt {
    /// A regular expression
    expression: String,
}

#[derive(Parser, Debug)]
#[command(author, version, about)]
enum Opt {
    /// Give an example of a string matching the provided regular expression
    #[arg()]
    Example(ExampleOpt),
    /// Enumerate the regular language generated by the provided regular expression
    #[arg()]
    Enumerate(EnumerateOpt),
}