use crate::Node; use core::marker::PhantomData; use core::ops::{DerefMut, Index, IndexMut}; struct SetNode { storage: Storage, index: Index, _s: PhantomData, _i: PhantomData, } #[node_macro::node_fn(SetNode<_S, _I>)] fn set_node(value: T, storage: &'any_input mut _S, index: _I) where _S: IndexMut<_I>, _S::Output: DerefMut + Sized, { *storage.index_mut(index).deref_mut() = value; } struct GetNode { storage: Storage, _s: PhantomData, } #[node_macro::node_fn(GetNode<_S>)] fn get_node<_S, I>(index: I, storage: &'any_input _S) -> &'input _S::Output where _S: Index, _S::Output: Sized, { storage.index(index) }