alux_shape_morph/
prefixed.rs1use crate::delegate::{delegate_members, delegate_shape_except_named};
4use alux_shape::{ShapeAlg, Words};
5
6#[derive(Debug, Clone, Copy)]
11pub struct Prefixed<A> {
12 inner: A,
13 word: &'static str,
14}
15
16impl<A> Prefixed<A> {
17 pub fn new(inner: A, word: &'static str) -> Self {
19 Self { inner, word }
20 }
21
22 fn inner(&self) -> &A {
24 &self.inner
25 }
26}
27
28impl<A> Prefixed<A>
29where
30 A: ShapeAlg,
31{
32 fn rename(&self, words: Words<'_>, body: A::Ty) -> A::Ty {
34 let mut named = vec![self.word];
35 named.extend_from_slice(words);
36
37 self.inner().named(&named, body)
38 }
39}
40
41delegate_shape_except_named!(Prefixed);
42delegate_members!(Prefixed);