Expand description
Composes two clap::Args
derivers together.
Example
This struct is especially useful, when implementing custom Writer
wrapping another one:
struct CustomWriter<Wr>(Wr);
#[derive(cli::Args)] // re-export of `clap::Args`
struct Cli {
#[clap(long)]
custom_option: Option<String>,
}
#[async_trait(?Send)]
impl<W, Wr> Writer<W> for CustomWriter<Wr>
where
W: World,
Wr: Writer<W>,
{
type Cli = cli::Compose<Cli, Wr::Cli>;
async fn handle_event(
&mut self,
ev: parser::Result<Event<event::Cucumber<W>>>,
cli: &Self::Cli,
) {
// Some custom logic including `cli.left.custom_option`.
// ...
self.0.handle_event(ev, &cli.right).await;
}
}
// Useful blanket impls:
impl cli::Colored for Cli {}
#[async_trait(?Send)]
impl<'val, W, Wr, Val> writer::Arbitrary<'val, W, Val> for CustomWriter<Wr>
where
Wr: writer::Arbitrary<'val, W, Val>,
Val: 'val,
Self: Writer<W>,
{
async fn write(&mut self, val: Val)
where
'val: 'async_trait,
{
self.0.write(val).await;
}
}
impl<W, Wr> writer::Stats<W> for CustomWriter<Wr>
where
Wr: writer::Stats<W>,
Self: Writer<W>,
{
fn passed_steps(&self) -> usize {
self.0.failed_steps()
}
fn skipped_steps(&self) -> usize {
self.0.failed_steps()
}
fn failed_steps(&self) -> usize {
self.0.failed_steps()
}
fn retried_steps(&self) -> usize {
self.0.retried_steps()
}
fn parsing_errors(&self) -> usize {
self.0.parsing_errors()
}
fn hook_errors(&self) -> usize {
self.0.hook_errors()
}
}
impl<Wr: writer::Normalized> writer::Normalized for CustomWriter<Wr> {}
impl<Wr: writer::NonTransforming> writer::NonTransforming
for CustomWriter<Wr>
{}
Fields
left: L
Left clap::Args
deriver.
right: R
Right clap::Args
deriver.
Implementations
Trait Implementations
sourceimpl<L: Args, R: Args> FromArgMatches for Compose<L, R>
impl<L: Args, R: Args> FromArgMatches for Compose<L, R>
sourcefn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
sourcefn from_arg_matches_mut(
__clap_arg_matches: &mut ArgMatches
) -> Result<Self, Error>
fn from_arg_matches_mut(
__clap_arg_matches: &mut ArgMatches
) -> Result<Self, Error>
sourcefn update_from_arg_matches(
&mut self,
__clap_arg_matches: &ArgMatches
) -> Result<(), Error>
fn update_from_arg_matches(
&mut self,
__clap_arg_matches: &ArgMatches
) -> Result<(), Error>
Assign values from
ArgMatches
to self
.sourcefn update_from_arg_matches_mut(
&mut self,
__clap_arg_matches: &mut ArgMatches
) -> Result<(), Error>
fn update_from_arg_matches_mut(
&mut self,
__clap_arg_matches: &mut ArgMatches
) -> Result<(), Error>
Assign values from
ArgMatches
to self
.Auto Trait Implementations
impl<L, R> RefUnwindSafe for Compose<L, R>where
L: RefUnwindSafe,
R: RefUnwindSafe,
impl<L, R> Send for Compose<L, R>where
L: Send,
R: Send,
impl<L, R> Sync for Compose<L, R>where
L: Sync,
R: Sync,
impl<L, R> Unpin for Compose<L, R>where
L: Unpin,
R: Unpin,
impl<L, R> UnwindSafe for Compose<L, R>where
L: UnwindSafe,
R: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Ext for T
impl<T> Ext for T
sourcefn assert_normalized(self) -> AssertNormalized<T>
fn assert_normalized(self) -> AssertNormalized<T>
sourcefn normalized<W>(self) -> Normalize<W, T>
fn normalized<W>(self) -> Normalize<W, T>
sourcefn summarized(self) -> Summarize<T>
fn summarized(self) -> Summarize<T>
sourcefn fail_on_skipped(
self
) -> FailOnSkipped<T, fn(&Feature, Option<&Rule>, &Scenario) -> bool>
fn fail_on_skipped(
self
) -> FailOnSkipped<T, fn(&Feature, Option<&Rule>, &Scenario) -> bool>
sourcefn fail_on_skipped_with<F>(self, f: F) -> FailOnSkipped<T, F>where
F: Fn(&Feature, Option<&Rule>, &Scenario) -> bool,
fn fail_on_skipped_with<F>(self, f: F) -> FailOnSkipped<T, F>where
F: Fn(&Feature, Option<&Rule>, &Scenario) -> bool,
sourcefn repeat_if<W, F>(self, filter: F) -> Repeat<W, T, F>where
F: Fn(&Result<Event<Cucumber<W>>, Error>) -> bool,
fn repeat_if<W, F>(self, filter: F) -> Repeat<W, T, F>where
F: Fn(&Result<Event<Cucumber<W>>, Error>) -> bool,
sourcefn discard_arbitrary_writes(self) -> Arbitrary<T>
fn discard_arbitrary_writes(self) -> Arbitrary<T>
Wraps this
Writer
into a discard::Arbitrary
one, providing a
no-op ArbitraryWriter
implementation. Read moresourcefn discard_stats_writes(self) -> Stats<T>
fn discard_stats_writes(self) -> Stats<T>
Wraps this
Writer
into a discard::Stats
one, providing a no-op
StatsWriter
implementation returning only 0
. Read more