use super::super::types::vim_any::VimAny;
use crate::types::structs::{
ManagedObjectReference, ObjectSpec, PropertySpec, SelectionSpec, TraversalSpec,
};
pub trait BoxableError: std::error::Error + Send + Sync + 'static {}
impl<E: std::error::Error + Send + Sync + 'static> BoxableError for E {}
pub use super::error::{Error, Result};
pub fn type_name(value: &VimAny) -> String {
match value {
VimAny::Value(value) => {
let type_name = value.as_str();
type_name.to_string()
}
VimAny::Object(obj) => {
let type_name = obj.data_type().as_str();
type_name.to_string()
}
}
}
pub trait Queriable {
fn prop_spec() -> PropertySpec;
}
pub(crate) fn obj_spec_for_view(view_moref: ManagedObjectReference) -> Vec<ObjectSpec> {
let r#type = view_moref.r#type.clone();
vec![ObjectSpec {
obj: view_moref,
skip: Some(false),
select_set: Some(vec![Box::new(TraversalSpec {
selection_spec_: SelectionSpec {
name: Some("traverseEntities".to_string()),
},
r#type: r#type.as_str().to_string(),
path: "view".to_string(),
skip: Some(false),
select_set: None,
})]),
}]
}