use ciborium::Value as CborValue;
use vantage_core::Result;
use vantage_types::{EmptyEntity, Entity, Record};
use vantage_vista::{Reference, Vista};
use crate::{table::Table, traits::table_source::TableSource};
impl<T: TableSource + 'static, E: Entity<T::Value> + 'static> Table<T, E> {
pub fn traverse_erased(
&self,
reference: &Reference,
row: Option<&Record<CborValue>>,
wrap: impl FnOnce(Table<T, EmptyEntity>) -> Result<Vista>,
) -> Result<Vista> {
let target = wrap(self.get_ref_target_erased(&reference.name)?)?;
match row {
Some(row) => reference.narrow(target, row),
None => Ok(target),
}
}
}