jubako 0.3.0

The reference implementation of the Jubako container format
Documentation
use crate::bases::Result;
type DynExplorable = Box<dyn Explorable>;

pub trait Explorable: erased_serde::Serialize {
    fn explore_one(&self, _item: &str) -> Result<Option<DynExplorable>> {
        Ok(None)
    }
    fn explore<'item>(
        &self,
        item: &'item str,
    ) -> Result<(Option<DynExplorable>, Option<&'item str>)> {
        if let Some((first, left)) = item.split_once("::") {
            self.explore_one(first).map(|explo| (explo, Some(left)))
        } else {
            self.explore_one(item).map(|explo| (explo, None))
        }
    }
}

impl Explorable for Vec<u8> {}
impl Explorable for String {}

erased_serde::serialize_trait_object!(Explorable);