What are my options for recursion without an allocator? I am attempting to create an iterator over struct key names, paired with a derive macro for the actual meta trait, but it needs to work recursively, which is where I kinda get stuck.. Current effort: ```rust // Implemented by derive macro pub(crate) trait Struct { fn field_at(&self, index: usize) -> Option<(&'static str, Option<&'a dyn Struct>)>; } pub struct KeyIter<'a> { pub(crate) struct_val: &'a dyn Struct, pub(crate) index: usize, pub(crate) prefix: Option>, pub(crate) inner: Option>, } impl<'a> FieldIter<'a> { pub fn new(value: &'a dyn Struct, prefix: Option>) -> Self { FieldIter { struct_val: value, index: 0, prefix, inner: None, } } } impl<'a> Iterator for KeyIter<'a> { type Item = heapless::String; fn next(&mut self) -> Option { let value = match &mut self.inner { Some(inner) => inner.next(), _ => None, }; if value.is_none() { self.inner.take(); } else { return value; } let value = match self.struct_val.field_at(self.index) { Some((field_name, None)) => { let mut key = heapless::String::new(); if let Some(prefix) = &self.prefix { key.push_str(prefix).unwrap(); key.push_str("/").unwrap(); } key.push_str(field_name).unwrap(); Some(key) } Some((field_name, Some(s))) => { let mut new_prefix = heapless::String::new(); if let Some(prefix) = &self.prefix { new_prefix.push_str(prefix).unwrap(); new_prefix.push_str("/").unwrap(); } new_prefix.push_str(field_name).unwrap(); let mut inner = KeyIter::new(s, Some(new_prefix)); let value = inner.next(); // FIXME: This does not work! // self.inner = Some(inner); value } None => None, }; self.index += value.is_some() as usize; value } } ```