vantage_table/table/impls/
traverse.rs1use ciborium::Value as CborValue;
5use vantage_core::Result;
6use vantage_types::{EmptyEntity, Entity, Record};
7use vantage_vista::{Reference, Vista};
8
9use crate::{table::Table, traits::table_source::TableSource};
10
11impl<T: TableSource + 'static, E: Entity<T::Value> + 'static> Table<T, E> {
12 pub fn traverse_erased(
17 &self,
18 reference: &Reference,
19 row: Option<&Record<CborValue>>,
20 wrap: impl FnOnce(Table<T, EmptyEntity>) -> Result<Vista>,
21 ) -> Result<Vista> {
22 let target = wrap(self.get_ref_target_erased(&reference.name)?)?;
23 match row {
24 Some(row) => reference.narrow(target, row),
25 None => Ok(target),
26 }
27 }
28}