use super::variant::*;
pub type Traversal<AnnotatedT> = Vec<Variant<AnnotatedT>>;
pub fn to_traversal<AnnotatedT>(ref_traversal: RefTraversal<AnnotatedT>) -> Traversal<AnnotatedT>
where
AnnotatedT: Clone,
{
ref_traversal.iter().map(|variant| (*variant).clone()).collect()
}
pub type RefTraversal<'own, AnnotatedT> = Vec<&'own Variant<AnnotatedT>>;
pub fn to_ref_traversal<AnnotatedT>(variant: &Variant<AnnotatedT>) -> Option<RefTraversal<'_, AnnotatedT>> {
match variant {
Variant::List(list) => {
if !list.inner.is_empty() {
return Some(list.inner.iter().collect());
}
}
_ => {
return Some(vec![variant]);
}
}
None
}