windjammer_ui/
to_vnode.rs

1//! ToVNode trait for converting components to VNode
2//!
3//! This trait allows any UI component to be converted to a VNode,
4//! enabling them to be used as children in other components.
5
6use crate::simple_vnode::VNode;
7
8/// Trait for types that can be converted to a VNode
9pub trait ToVNode {
10    /// Convert this component to a VNode
11    fn to_vnode(self) -> VNode;
12}
13
14// Implement for VNode itself (identity conversion)
15impl ToVNode for VNode {
16    fn to_vnode(self) -> VNode {
17        self
18    }
19}
20
21// Implement for String (text node)
22impl ToVNode for String {
23    fn to_vnode(self) -> VNode {
24        VNode::Text(self)
25    }
26}
27
28// Implement for &str (text node)
29impl ToVNode for &str {
30    fn to_vnode(self) -> VNode {
31        VNode::Text(self.to_string())
32    }
33}
34
35// Implement for Vec<VNode> (fragment)
36impl ToVNode for Vec<VNode> {
37    fn to_vnode(self) -> VNode {
38        // Wrap in a fragment div
39        VNode::element("div", vec![], self)
40    }
41}