use crate::scope::{ScopeOrigin, ScopeTag};
use alloc::vec::Vec as StdVec;
use vize_l0::String;
use vize_l0::id::NodeId;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SlotName {
Static {
text: String,
origin: ScopeOrigin,
},
Dynamic {
text: String,
},
}
impl SlotName {
#[must_use]
pub fn text(&self) -> &str {
match self {
SlotName::Static { text, .. } | SlotName::Dynamic { text } => text.as_str(),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SlotBound {
Named(String),
Pending,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SlotParams {
Absent,
Scoped {
text: String,
tag: ScopeTag,
name: SlotBound,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SlotCarrier {
Component,
Template(Option<NodeId>),
Implicit,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SlotGroup {
pub name: SlotName,
pub params: SlotParams,
pub carrier: SlotCarrier,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SlotFacts {
pub groups: StdVec<SlotGroup>,
}
const _: () = {
const fn assert_owned<T: 'static>() {}
assert_owned::<SlotName>();
assert_owned::<SlotBound>();
assert_owned::<SlotParams>();
assert_owned::<SlotCarrier>();
assert_owned::<SlotGroup>();
assert_owned::<SlotFacts>();
};
#[cfg(target_pointer_width = "64")]
const _: () = {
assert!(core::mem::size_of::<SlotName>() == 48);
assert!(core::mem::size_of::<SlotBound>() == 24);
assert!(core::mem::size_of::<SlotParams>() == 56);
assert!(core::mem::size_of::<SlotCarrier>() == 8);
assert!(core::mem::size_of::<SlotGroup>() == 112);
assert!(core::mem::size_of::<SlotFacts>() == 24);
};