use derive_more::{Deref, DerefMut};
use crate::{event::Cucumber, parser, writer, Event, World, Writer};
#[derive(Clone, Copy, Debug, Deref, DerefMut)]
pub struct Arbitrary<Wr: ?Sized>(Wr);
#[warn(clippy::missing_trait_methods)]
impl<W: World, Wr: Writer<W> + ?Sized> Writer<W> for Arbitrary<Wr> {
type Cli = Wr::Cli;
async fn handle_event(
&mut self,
ev: parser::Result<Event<Cucumber<W>>>,
cli: &Self::Cli,
) {
self.0.handle_event(ev, cli).await;
}
}
#[warn(clippy::missing_trait_methods)]
impl<W, Val, Wr> writer::Arbitrary<W, Val> for Arbitrary<Wr>
where
Wr: ?Sized,
Self: Writer<W>,
{
async fn write(
&mut self,
#[allow(clippy::let_underscore_untyped)] _: Val,
) {
}
}
#[warn(clippy::missing_trait_methods)]
impl<W, Wr> writer::Stats<W> for Arbitrary<Wr>
where
Wr: writer::Stats<W> + ?Sized,
Self: Writer<W>,
{
fn passed_steps(&self) -> usize {
self.0.passed_steps()
}
fn skipped_steps(&self) -> usize {
self.0.skipped_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()
}
fn execution_has_failed(&self) -> bool {
self.0.execution_has_failed()
}
}
#[warn(clippy::missing_trait_methods)]
impl<Wr: writer::Normalized> writer::Normalized for Arbitrary<Wr> {}
#[warn(clippy::missing_trait_methods)]
impl<Wr: writer::NonTransforming> writer::NonTransforming for Arbitrary<Wr> {}
impl<Wr> Arbitrary<Wr> {
#[must_use]
pub const fn wrap(writer: Wr) -> Self {
Self(writer)
}
}
#[derive(Clone, Copy, Debug, Deref, DerefMut)]
pub struct Stats<Wr: ?Sized>(Wr);
#[warn(clippy::missing_trait_methods)]
impl<W: World, Wr: Writer<W> + ?Sized> Writer<W> for Stats<Wr> {
type Cli = Wr::Cli;
async fn handle_event(
&mut self,
ev: parser::Result<Event<Cucumber<W>>>,
cli: &Self::Cli,
) {
self.0.handle_event(ev, cli).await;
}
}
#[warn(clippy::missing_trait_methods)]
impl<W, Val, Wr> writer::Arbitrary<W, Val> for Stats<Wr>
where
Wr: writer::Arbitrary<W, Val> + ?Sized,
Self: Writer<W>,
{
async fn write(&mut self, val: Val) {
self.0.write(val).await;
}
}
impl<W, Wr> writer::Stats<W> for Stats<Wr>
where
Wr: Writer<W> + ?Sized,
Self: Writer<W>,
{
fn passed_steps(&self) -> usize {
0
}
fn skipped_steps(&self) -> usize {
0
}
fn failed_steps(&self) -> usize {
0
}
fn retried_steps(&self) -> usize {
0
}
fn parsing_errors(&self) -> usize {
0
}
fn hook_errors(&self) -> usize {
0
}
}
#[warn(clippy::missing_trait_methods)]
impl<Wr: writer::Normalized> writer::Normalized for Stats<Wr> {}
#[warn(clippy::missing_trait_methods)]
impl<Wr: writer::NonTransforming> writer::NonTransforming for Stats<Wr> {}
impl<Wr> Stats<Wr> {
#[must_use]
pub const fn wrap(writer: Wr) -> Self {
Self(writer)
}
}