use crate::{sdf, tf, vt};
pub trait AbstractData {
fn spec_type(&self, path: &sdf::Path) -> Option<sdf::SpecType>;
fn get(&self, path: &sdf::Path, field: &tf::Token) -> Option<vt::Value>;
fn list(&self, path: &sdf::Path) -> Vec<&tf::Token>;
fn visit_specs(&self) -> Vec<&sdf::Path>;
}
pub fn debug_dump(data: &dyn sdf::AbstractData) {
println!("AbstractData dump");
println!("Spec count: {}\n", data.visit_specs().len());
for path in data.visit_specs() {
let spec_type = data.spec_type(path).unwrap();
println!("[{:?}] {}", spec_type, path);
for field in data.list(path) {
if let Some(value) = data.get(path, field) {
println!(" {} = {:?}", field, value);
}
}
}
}