vertigo 0.2.0-alpha

Reactive Real-DOM library for Rust
Documentation
use crate::{
    dom::dom_node::{DomNode, DomNodeFragment},
    Computed, DomText, DomElement, DomComment, DomFragment, Value,
};

pub trait EmbedDom {
    fn embed(self) -> DomNodeFragment;
}

impl EmbedDom for DomElement {
    fn embed(self) -> DomNodeFragment {
        DomNodeFragment::Node { node: self }
    }
}

impl EmbedDom for DomComment {
    fn embed(self) -> DomNodeFragment {
        DomNodeFragment::Comment { node: self }
    }
}

impl EmbedDom for DomFragment {
    fn embed(self) -> DomNodeFragment {
        DomNodeFragment::Fragment { node: self }
    }
}

impl EmbedDom for DomText {
    fn embed(self) -> DomNodeFragment {
        DomNodeFragment::Text { node: self }
    }
}

impl EmbedDom for DomNode {
    fn embed(self) -> DomNodeFragment {
        self.into()
    }
}

impl<T: ToString> EmbedDom for T {
    fn embed(self) -> DomNodeFragment {
        DomNodeFragment::Text {
            node: DomText::new(self.to_string())
        }
    }
}

impl<T: ToString + Clone + PartialEq + 'static> EmbedDom for &Computed<T> {
    fn embed(self) -> DomNodeFragment {
        let comment_create = self.render_value(|val|
            DomNodeFragment::Text {
                node: DomText::new(val.to_string())
            }
        );

        comment_create.embed()
    }
}

impl<T: ToString + Clone + PartialEq + 'static> EmbedDom for Computed<T> {
    fn embed(self) -> DomNodeFragment {
        (&self).embed()
    }
}

impl<T: ToString + Clone + PartialEq + 'static> EmbedDom for Value<T> {
    fn embed(self) -> DomNodeFragment {
        self.to_computed().embed()
    }
}

impl<T: ToString + Clone + PartialEq + 'static> EmbedDom for &Value<T> {
    fn embed(self) -> DomNodeFragment {
        self.to_computed().embed()
    }
}