use ciborium::Value as CborValue;
use vantage_types::Record;
use crate::metadata::VistaMetadata;
pub fn cell_get<'a>(
row: &'a Record<CborValue>,
column: &str,
metadata: &VistaMetadata,
) -> Option<&'a CborValue> {
if !column.contains('.') || metadata.columns.contains_key(column) {
row.get(column)
} else {
path_get(row, column)
}
}
pub(crate) fn path_get<'a>(row: &'a Record<CborValue>, path: &str) -> Option<&'a CborValue> {
let mut segments = path.split('.');
let mut current = row.get(segments.next()?)?;
for segment in segments {
let CborValue::Map(entries) = current else {
return None;
};
current = entries.iter().find_map(|(key, value)| match key {
CborValue::Text(name) if name == segment => Some(value),
_ => None,
})?;
}
Some(current)
}