use crate::delegate::{delegate_members, delegate_shape_except_named};
use alux_shape::{ShapeAlg, Words};
#[derive(Debug, Clone, Copy)]
pub struct Prefixed<A> {
inner: A,
word: &'static str,
}
impl<A> Prefixed<A> {
pub fn new(inner: A, word: &'static str) -> Self {
Self { inner, word }
}
fn inner(&self) -> &A {
&self.inner
}
}
impl<A> Prefixed<A>
where
A: ShapeAlg,
{
fn rename(&self, words: Words<'_>, body: A::Ty) -> A::Ty {
let mut named = vec![self.word];
named.extend_from_slice(words);
self.inner().named(&named, body)
}
}
delegate_shape_except_named!(Prefixed);
delegate_members!(Prefixed);