Skip to main content

MapFn

Trait MapFn 

Source
pub trait MapFn<In, Out>: FnMut(In) -> Out { }
Expand description

A record-to-record transform between families. Implemented for every FnMut(In) -> Out; expressed as an independent two-parameter trait so higher-ranked builder bounds stay legal for borrowing families (see the module docs on E0582). fn items satisfy it at every lifetime.

Name the bound to write a helper generic over one stage.

use spate_core::deser::RecFamily;
use spate_core::ops::MapFn;

struct LogEvent<'buf> {
    line: &'buf str,
}
struct LogF;
impl RecFamily for LogF {
    type Rec<'buf> = LogEvent<'buf>;
}

fn first_word<'a>(ev: LogEvent<'a>) -> LogEvent<'a> {
    LogEvent {
        line: ev.line.split(' ').next().unwrap_or(""),
    }
}

fn stage<F, G>(g: G) -> G
where
    F: RecFamily,
    G: for<'buf> MapFn<F::Rec<'buf>, F::Rec<'buf>>,
{
    g
}

let _ = stage::<LogF, _>(first_word);

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl<G, In, Out> MapFn<In, Out> for G
where G: FnMut(In) -> Out,