mirror of
https://github.com/clap-rs/clap
synced 2024-12-14 06:42:33 +00:00
refactor(Derives): changes the derive traits for the clap_derive crate
This commit is contained in:
parent
683105cdd1
commit
53b2ca51f4
2 changed files with 35 additions and 54 deletions
|
@ -58,6 +58,7 @@ clippy = { version = "~0.0.166", optional = true }
|
||||||
atty = { version = "0.2.2", optional = true }
|
atty = { version = "0.2.2", optional = true }
|
||||||
vec_map = { version = "0.8", optional = true }
|
vec_map = { version = "0.8", optional = true }
|
||||||
term_size = { version = "1.0.0-beta1", optional = true }
|
term_size = { version = "1.0.0-beta1", optional = true }
|
||||||
|
clap_derive = { path = "../clap_derive", optional = true }
|
||||||
|
|
||||||
[target.'cfg(not(windows))'.dependencies]
|
[target.'cfg(not(windows))'.dependencies]
|
||||||
ansi_term = { version = "0.11.0", optional = true }
|
ansi_term = { version = "0.11.0", optional = true }
|
||||||
|
@ -68,10 +69,11 @@ lazy_static = "1"
|
||||||
version-sync = "0.5"
|
version-sync = "0.5"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["suggestions", "color", "vec_map"]
|
default = ["suggestions", "color", "vec_map", "derive"]
|
||||||
suggestions = ["strsim"]
|
suggestions = ["strsim"]
|
||||||
color = ["ansi_term", "atty"]
|
color = ["ansi_term", "atty"]
|
||||||
wrap_help = ["term_size", "textwrap/term_size"]
|
wrap_help = ["term_size", "textwrap/term_size"]
|
||||||
|
derive = ["clap_derive"]
|
||||||
yaml = ["yaml-rust"]
|
yaml = ["yaml-rust"]
|
||||||
unstable = [] # for building with unstable clap features (doesn't require nightly Rust) (currently none)
|
unstable = [] # for building with unstable clap features (doesn't require nightly Rust) (currently none)
|
||||||
nightly = [] # for building with unstable Rust features (currently none)
|
nightly = [] # for building with unstable Rust features (currently none)
|
||||||
|
|
85
src/lib.rs
85
src/lib.rs
|
@ -551,6 +551,10 @@ extern crate unicode_width;
|
||||||
extern crate vec_map;
|
extern crate vec_map;
|
||||||
#[cfg(feature = "yaml")]
|
#[cfg(feature = "yaml")]
|
||||||
extern crate yaml_rust;
|
extern crate yaml_rust;
|
||||||
|
#[cfg(feature = "derive")]
|
||||||
|
#[cfg_attr(feature = "derive", allow(unused_imports))]
|
||||||
|
#[cfg_attr(feature = "derive", macro_use)]
|
||||||
|
extern crate clap_derive;
|
||||||
|
|
||||||
#[cfg(feature = "yaml")]
|
#[cfg(feature = "yaml")]
|
||||||
pub use yaml_rust::YamlLoader;
|
pub use yaml_rust::YamlLoader;
|
||||||
|
@ -560,6 +564,12 @@ pub use output::fmt::Format;
|
||||||
pub use parse::errors::{Error, ErrorKind, Result};
|
pub use parse::errors::{Error, ErrorKind, Result};
|
||||||
pub use completions::Shell;
|
pub use completions::Shell;
|
||||||
|
|
||||||
|
#[cfg(feature = "derive")]
|
||||||
|
#[cfg_attr(feature = "derive", doc(hidden))]
|
||||||
|
pub use clap_derive::*;
|
||||||
|
|
||||||
|
use std::result::Result as StdResult;
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
mod macros;
|
mod macros;
|
||||||
mod completions;
|
mod completions;
|
||||||
|
@ -572,58 +582,27 @@ const INTERNAL_ERROR_MSG: &'static str = "Fatal internal error. Please consider
|
||||||
report at https://github.com/kbknapp/clap-rs/issues";
|
report at https://github.com/kbknapp/clap-rs/issues";
|
||||||
const INVALID_UTF8: &'static str = "unexpected invalid UTF-8 code point";
|
const INVALID_UTF8: &'static str = "unexpected invalid UTF-8 code point";
|
||||||
|
|
||||||
#[cfg(unstable)]
|
/// @TODO @release @docs
|
||||||
pub use derive::{ArgEnum, ClapApp, FromArgMatches, IntoApp};
|
pub trait Clap: FromArgMatches + IntoApp + Sized {
|
||||||
|
|
||||||
#[cfg(unstable)]
|
|
||||||
mod derive {
|
|
||||||
/// @TODO @release @docs
|
|
||||||
pub trait Clap: IntoApp + FromArgMatches + Parse + Sized {}
|
|
||||||
|
|
||||||
/// @TODO @release @docs
|
|
||||||
pub trait Parse {
|
|
||||||
/// @TODO @release @docs
|
|
||||||
fn parse() -> Self { Self::from_argmatches(Self::into_app().get_matches()) }
|
|
||||||
|
|
||||||
/// @TODO @release @docs
|
|
||||||
fn parse_from<I, T>(argv: I) -> Self
|
|
||||||
where
|
|
||||||
I: IntoIterator<Item = T>,
|
|
||||||
T: Into<OsString> + Clone,
|
|
||||||
{
|
|
||||||
Self::from_argmatches(Self::into_app().get_matches_from(argv))
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @TODO @release @docs
|
|
||||||
fn try_parse() -> Result<Self, clap::Error> {
|
|
||||||
Self::try_from_argmatches(Self::into_app().get_matches_safe()?)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @TODO @release @docs
|
|
||||||
fn try_parse_from<I, T>(argv: I) -> Result<Self, clap::Error>
|
|
||||||
where
|
|
||||||
I: IntoIterator<Item = T>,
|
|
||||||
T: Into<OsString> + Clone,
|
|
||||||
{
|
|
||||||
Self::try_from_argmatches(Self::into_app().get_matches_from_safe(argv)?)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @TODO @release @docs
|
|
||||||
pub trait IntoApp {
|
|
||||||
/// @TODO @release @docs
|
|
||||||
fn into_app<'a, 'b>() -> clap::App<'a, 'b>;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @TODO @release @docs
|
|
||||||
pub trait FromArgMatches: Sized {
|
|
||||||
/// @TODO @release @docs
|
|
||||||
fn from_argmatches<'a>(matches: clap::ArgMatches<'a>) -> Self;
|
|
||||||
|
|
||||||
/// @TODO @release @docs
|
|
||||||
fn try_from_argmatches<'a>(matches: clap::ArgMatches<'a>) -> Result<Self, clap::Error>;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @TODO @release @docs
|
|
||||||
pub trait ArgEnum {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// @TODO @release @docs
|
||||||
|
pub trait FromArgMatches: Sized {
|
||||||
|
/// @TODO @release @docs
|
||||||
|
fn from_argmatches<'a>(matches: &::parse::ArgMatches<'a>) -> Self;
|
||||||
|
|
||||||
|
/// @TODO @release @docs
|
||||||
|
fn try_from_argmatches<'a>(matches: &::parse::ArgMatches<'a>) -> StdResult<Self, ::parse::errors::Error> {
|
||||||
|
Ok(<Self as FromArgMatches>::from_argmatches(matches))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @TODO @release @docs
|
||||||
|
pub trait IntoApp: Sized {
|
||||||
|
/// @TODO @release @docs
|
||||||
|
fn into_app<'a, 'b>() -> ::build::App<'a, 'b>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @TODO @release @docs
|
||||||
|
pub trait ArgEnum {}
|
||||||
|
|
Loading…
Reference in a new issue