use beet_core::prelude::*;
pub type RsxNodes = (
NodeTag,
FragmentNode,
TemplateNode,
TextNode,
NumberNode,
BoolNode,
BlockNode,
);
#[derive(Debug, Clone, PartialEq, Eq, Component, Reflect, Deref, DerefMut)]
#[reflect(Component)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "tokens", derive(ToTokens))]
pub struct NodeTag(pub String);
impl std::fmt::Display for NodeTag {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
impl NodeTag {
pub fn new(tag: impl Into<String>) -> Self { Self(tag.into()) }
pub fn tag(&self) -> &str { &self.0 }
}
#[derive(Debug, Default, Copy, Clone, Component, Reflect)]
#[reflect(Default, Component)]
#[component(immutable)]
#[require(FragmentNode)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "tokens", derive(ToTokens))]
pub struct TemplateNode;
#[derive(Debug, Default, Copy, Clone, Component, Reflect)]
#[reflect(Default, Component)]
#[component(immutable)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "tokens", derive(ToTokens))]
pub struct FragmentNode;
#[derive(Debug, Default, Clone, Component, Reflect)]
#[reflect(Default, Component)]
#[component(immutable)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "tokens", derive(ToTokens))]
pub struct BlockNode;
#[derive(
Debug,
Default,
Clone,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
Deref,
DerefMut,
Component,
Reflect,
)]
#[reflect(Default, Component)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "tokens", derive(ToTokens))]
#[cfg_attr(feature = "bevy_text", require(bevy::prelude::TextSpan))]
pub struct TextNode(pub String);
impl TextNode {
pub fn new(val: impl Into<String>) -> Self { Self(val.into()) }
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
PartialOrd,
Deref,
DerefMut,
Component,
Reflect,
)]
#[reflect(Default, Component)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "tokens", derive(ToTokens))]
#[cfg_attr(feature = "bevy_text", require(bevy::prelude::TextSpan))]
#[require(TextNode)]
pub struct NumberNode(pub f64);
impl NumberNode {
pub fn new(value: impl Into<f64>) -> Self { Self(value.into()) }
}
#[derive(
Debug,
Default,
Clone,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
Deref,
DerefMut,
Component,
Reflect,
)]
#[reflect(Default, Component)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "tokens", derive(ToTokens))]
#[cfg_attr(feature = "bevy_text", require(bevy::prelude::TextSpan))]
#[require(TextNode)]
pub struct BoolNode(pub bool);
impl BoolNode {
pub fn new(value: impl Into<bool>) -> Self { Self(value.into()) }
}
impl std::fmt::Display for TextNode {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
impl std::fmt::Display for NumberNode {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
impl std::fmt::Display for BoolNode {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}