use std::any::Any;
use dyn_clone::DynClone;
use crate::{
Extract,
core_item::{camera_frame::CameraFrame, mesh_item::MeshItem, vitem::VItem},
};
pub mod camera_frame;
pub mod mesh_item;
pub mod vitem;
#[derive(Debug, Clone, PartialEq)]
pub enum CoreItem {
CameraFrame(CameraFrame),
VItem(VItem),
MeshItem(MeshItem),
}
pub trait AnyExtractCoreItem: Any + Extract<Target = CoreItem> + DynClone {}
impl<T: Extract<Target = CoreItem> + Any + DynClone> AnyExtractCoreItem for T {}
dyn_clone::clone_trait_object!(AnyExtractCoreItem);
#[derive(Clone)]
pub struct DynItem(pub Box<dyn AnyExtractCoreItem>);
impl Extract for DynItem {
type Target = CoreItem;
fn extract_into(&self, buf: &mut Vec<Self::Target>) {
self.0.extract_into(buf);
}
}