pub struct Compose<L: Args, R: Args> {
pub left: L,
pub right: R,
}
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 {
#[arg(long)]
custom_option: Option<String>,
}
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 {}
impl<W, Wr, Val> writer::Arbitrary<W, Val> for CustomWriter<Wr>
where
Wr: writer::Arbitrary<W, Val>,
Self: Writer<W>,
{
async fn write(&mut self, val: Val) {
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§
source§impl<L: Args, R: Args> Args for Compose<L, R>
impl<L: Args, R: Args> Args for Compose<L, R>
source§fn augment_args<'b>(__clap_app: Command) -> Command
fn augment_args<'b>(__clap_app: Command) -> Command
source§impl<L: Args, R: Args> FromArgMatches for Compose<L, R>
impl<L: Args, R: Args> FromArgMatches for Compose<L, R>
source§fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
source§fn 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>
source§fn 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
.source§fn 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
.impl<L: Copy + Args, R: Copy + Args> Copy for Compose<L, R>
Auto Trait Implementations§
impl<L, R> Freeze for Compose<L, R>
impl<L, R> RefUnwindSafe for Compose<L, R>where
L: RefUnwindSafe,
R: RefUnwindSafe,
impl<L, R> Send for Compose<L, R>
impl<L, R> Sync for Compose<L, R>
impl<L, R> Unpin for Compose<L, R>
impl<L, R> UnwindSafe for Compose<L, R>where
L: UnwindSafe,
R: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> Ext for T
impl<T> Ext for T
source§fn assert_normalized(self) -> AssertNormalized<T>
fn assert_normalized(self) -> AssertNormalized<T>
source§fn normalized<W>(self) -> Normalize<W, T>
fn normalized<W>(self) -> Normalize<W, T>
source§fn summarized(self) -> Summarize<T>
fn summarized(self) -> Summarize<T>
source§fn fail_on_skipped(self) -> FailOnSkipped<T>
fn fail_on_skipped(self) -> FailOnSkipped<T>
source§fn fail_on_skipped_with<F>(self, f: F) -> FailOnSkipped<T, F>
fn fail_on_skipped_with<F>(self, f: F) -> FailOnSkipped<T, F>
source§fn repeat_skipped<W>(self) -> Repeat<W, T>
fn repeat_skipped<W>(self) -> Repeat<W, T>
source§fn repeat_failed<W>(self) -> Repeat<W, T>
fn repeat_failed<W>(self) -> Repeat<W, T>
source§fn repeat_if<W, F>(self, filter: F) -> Repeat<W, T, F>
fn repeat_if<W, F>(self, filter: F) -> Repeat<W, T, F>
Wraps this
Writer
to re-output filter
ed events at the end of an
output.source§fn tee<W, Wr>(self, other: Wr) -> Tee<T, Wr>where
Wr: Writer<W>,
fn tee<W, Wr>(self, other: Wr) -> Tee<T, Wr>where
Wr: Writer<W>,
Attaches the provided
other
Writer
to the current one for passing
events to both of them simultaneously.source§fn 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 moresource§fn 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 moresource§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more