Skip to main content

topcoat_runtime/
expr.rs

1use topcoat_core::context::Cx;
2use topcoat_view::{NodeViewParts, PartsWriter, ViewPart};
3
4#[derive(Debug, Clone)]
5pub struct Expr<T> {
6    pub(crate) evaluated: T,
7    pub(crate) js: ViewPart,
8}
9
10impl<T> Expr<T> {
11    #[inline]
12    pub fn new(evaluated: T, js: ViewPart) -> Self {
13        Self { evaluated, js }
14    }
15
16    #[inline]
17    pub fn into_evaluated_and_js(self) -> (T, ViewPart) {
18        (self.evaluated, self.js)
19    }
20}
21
22impl<T> NodeViewParts for Expr<T>
23where
24    T: NodeViewParts,
25{
26    fn into_view_parts(self, cx: &Cx, parts: &mut PartsWriter<'_>) {
27        parts.push_str_unescaped("<!-- ::topcoat::expr::start(\"");
28        parts.push_part(self.js);
29        parts.push_str_unescaped("\") -->");
30        self.evaluated.into_view_parts(cx, parts);
31        parts.push_str_unescaped("<!-- ::topcoat::expr::end -->");
32    }
33}