use core::marker::PhantomData; use crate::Node; pub struct IntNode; impl<'n, const N: u32> Node<'n> for IntNode { type Output = u32; fn eval(&self) -> u32 { N } } #[derive(Default)] pub struct ValueNode(pub T); impl<'n, T: 'n> Node<'n> for ValueNode { type Output = &'n T; fn eval(&'n self) -> Self::Output { &self.0 } } impl<'n, T> ValueNode { pub const fn new(value: T) -> ValueNode { ValueNode(value) } } #[derive(Default)] pub struct DefaultNode(PhantomData); impl<'n, T: Default + 'n> Node<'n> for DefaultNode { type Output = T; fn eval(&self) -> T { T::default() } } impl DefaultNode { pub const fn new() -> DefaultNode { DefaultNode(PhantomData) } }