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".