ranim_core/primitives/
mod.rs

1use crate::{
2    Extract,
3    primitives::{camera_frame::CameraFrame, vitem::VItemPrimitive},
4};
5
6/// Camera frame
7pub mod camera_frame;
8/// Vitem
9pub mod vitem;
10
11/// The most basic building block in ranim.
12pub trait Primitive {
13    /// Build primitives
14    fn build_primitives<T: IntoIterator<Item = Self>>(iter: T) -> Primitives;
15}
16
17impl<T: Primitive + Clone> Extract for T {
18    type Target = Self;
19    fn extract(&self) -> Vec<Self::Target> {
20        vec![self.clone()]
21    }
22}
23
24/// A collection of [`Primitive`]s
25#[derive(Debug, Clone, PartialEq)]
26pub enum Primitives {
27    /// `Vec<CameraFrame>`
28    CameraFrame(Vec<CameraFrame>),
29    /// `Vec<VItemPrimitive>`
30    VItemPrimitive(Vec<VItemPrimitive>),
31}
32
33impl Primitives {
34    /// This is temporary to convert [`Primitives`] to [`CoreItem`]s
35    pub fn boom(self) -> Vec<CoreItem> {
36        match self {
37            Primitives::CameraFrame(x) => x.into_iter().map(CoreItem::CameraFrame).collect(),
38            Primitives::VItemPrimitive(x) => x.into_iter().map(CoreItem::VItemPrimitive).collect(),
39        }
40    }
41}
42
43/// The core ranim builtin items
44pub enum CoreItem {
45    /// [`CameraFrame`]
46    CameraFrame(CameraFrame),
47    /// [`VItemPrimitive`]
48    VItemPrimitive(VItemPrimitive),
49}