use crate::nodes::node::Node;
#[cfg(feature = "alloc")]
pub struct SetBuilder {
items: alloc::vec::Vec<Node>,
}
#[cfg(feature = "alloc")]
impl SetBuilder {
pub fn new() -> Self {
Self {
items: alloc::vec::Vec::new(),
}
}
pub fn insert<T: Into<Node>>(mut self, value: T) -> Self {
let node = value.into();
if !self.items.contains(&node) {
self.items.push(node);
}
self
}
pub fn extend<T: Into<Node>>(mut self, values: impl IntoIterator<Item = T>) -> Self {
for value in values {
let node = value.into();
if !self.items.contains(&node) {
self.items.push(node);
}
}
self
}
pub fn build(self) -> Node {
Node::Set(self.items)
}
pub fn len(&self) -> usize {
self.items.len()
}
pub fn is_empty(&self) -> bool {
self.items.is_empty()
}
pub fn contains(&self, value: &Node) -> bool {
self.items.contains(value)
}
}
#[cfg(feature = "alloc")]
impl Default for SetBuilder {
fn default() -> Self {
Self::new()
}
}