html_node_core/node/
fragment.rs1use std::fmt::{self, Display, Formatter};
2
3use super::write_children;
4use crate::Node;
5
6#[derive(Debug, Clone, PartialEq, Eq)]
14#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
15pub struct Fragment {
16 pub children: Vec<Node>,
24}
25
26impl Fragment {
27 pub const EMPTY: Self = Self {
29 children: Vec::new(),
30 };
31}
32
33impl Default for Fragment {
34 fn default() -> Self {
35 Self::EMPTY
36 }
37}
38
39impl Display for Fragment {
40 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
42 write_children(f, &self.children, true)
43 }
44}
45
46impl<N> FromIterator<N> for Fragment
47where
48 N: Into<Node>,
49{
50 fn from_iter<I>(iter: I) -> Self
53 where
54 I: IntoIterator<Item = N>,
55 {
56 Self {
57 children: iter.into_iter().map(Into::into).collect(),
58 }
59 }
60}
61
62impl<I, N> From<I> for Fragment
63where
64 I: IntoIterator<Item = N>,
65 N: Into<Node>,
66{
67 fn from(iter: I) -> Self {
70 Self::from_iter(iter)
71 }
72}