pub trait Layer<Inner> {
type LayerType;
fn layer(&self, inner: Inner) -> Self::LayerType;
}
#[derive(Clone, Copy, Debug, Default)]
pub struct IdentityLayer;
impl IdentityLayer {
pub fn new() -> Self {
Self
}
}
impl<T> Layer<T> for IdentityLayer {
type LayerType = T;
fn layer(&self, inner: T) -> Self::LayerType {
inner
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn identity_layer_passes_through() {
let value = 42;
let layered = Layer::layer(&IdentityLayer::new(), value);
assert_eq!(layered, value);
}
}