pub(crate) mod aopt;
pub(crate) mod config;
pub(crate) mod creator;
pub(crate) mod help;
pub(crate) mod info;
pub(crate) mod parser;
#[cfg(feature = "serde")]
pub(crate) mod serialize;
pub(crate) mod value;
pub use self::aopt::AOpt;
pub use self::config::ConfigBuild;
pub use self::config::ConfigBuildInfer;
pub use self::config::ConfigBuildMutable;
pub use self::config::ConfigBuildWith;
pub use self::config::ConfigBuilder;
pub use self::config::ConfigBuilderWith;
pub use self::config::ConfigValue;
pub use self::config::OptConfig;
pub use self::creator::Cid;
pub use self::creator::Creator;
pub use self::help::Help;
pub use self::info::ConstrctInfo;
pub use self::info::Information;
pub use self::parser::StrParser;
#[cfg(feature = "serde")]
pub use self::serialize::Deserialize;
#[cfg(feature = "serde")]
pub use self::serialize::Serde;
#[cfg(feature = "serde")]
pub use self::serialize::Serialize;
pub use self::value::OptValueExt;
pub use crate::acore::opt::Action;
pub use crate::acore::opt::Index;
pub use crate::acore::opt::Opt;
pub use crate::acore::opt::Style;
pub use crate::acore::opt::BOOL_FALSE;
pub use crate::acore::opt::BOOL_TRUE;
use std::fmt::Debug;
use std::ops::Deref;
use std::ops::DerefMut;
use crate::Error;
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord)]
pub struct Cmd(pub bool);
impl Cmd {
pub fn new(value: bool) -> Self {
Self(value)
}
}
impl Deref for Cmd {
type Target = bool;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl DerefMut for Cmd {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord)]
pub struct Pos<T = bool>(pub T);
impl<T> Pos<T> {
pub fn new(value: T) -> Self {
Self(value)
}
}
impl<T> Deref for Pos<T> {
type Target = T;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl<T> DerefMut for Pos<T> {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord)]
pub struct Main<T = ()>(pub T);
impl<T> Main<T> {
pub fn new(value: T) -> Self {
Self(value)
}
}
impl<T> Deref for Main<T> {
type Target = T;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl<T> DerefMut for Main<T> {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord)]
pub struct MutOpt<T>(pub T);
impl<T> MutOpt<T> {
pub fn new(value: T) -> Self {
Self(value)
}
}
impl<T> Deref for MutOpt<T> {
type Target = T;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl<T> DerefMut for MutOpt<T> {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord)]
pub struct AnyOpt<T = ()>(pub T);
impl<T> AnyOpt<T> {
pub fn new(value: T) -> Self {
Self(value)
}
}
impl<T> Deref for AnyOpt<T> {
type Target = T;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl<T> DerefMut for AnyOpt<T> {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
pub trait OptParser {
type Output;
type Error: Into<Error>;
fn parse_opt(&self, pattern: &str) -> Result<Self::Output, Self::Error>;
}