use std::sync::Arc;
use vantage_vista::VistaCapabilities;
use super::DioInner;
pub struct DioShell {
pub(crate) dio: Arc<DioInner>,
pub(crate) capabilities: VistaCapabilities,
}
impl DioShell {
pub(crate) fn new(dio: Arc<DioInner>) -> Self {
let master_caps = dio.master.capabilities().clone();
let cbs = &dio.lens.callbacks;
let has_on_write = cbs.on_write.is_some();
let has_on_event = cbs.on_event.is_some();
let capabilities = VistaCapabilities {
can_count: true,
can_insert: master_caps.can_insert || has_on_write,
can_update: master_caps.can_update || has_on_write,
can_delete: master_caps.can_delete || has_on_write,
can_subscribe: true,
can_invalidate: master_caps.can_invalidate || has_on_event,
can_order: master_caps.can_order,
can_search: master_caps.can_search,
can_set_page_size: master_caps.can_set_page_size,
can_fetch_page: master_caps.can_fetch_page,
can_fetch_next: master_caps.can_fetch_next,
can_traverse_to_record: master_caps.can_traverse_to_record,
can_traverse_to_set: master_caps.can_traverse_to_set,
can_build_ref_via_script: master_caps.can_build_ref_via_script,
};
Self { dio, capabilities }
}
}