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}