pinwheel 0.1.0

Build web applications with Rust.
Documentation
use crate::prelude::*;
use std::borrow::Cow;

pub struct Dehydrate<T>
where
	T: Component + serde::Serialize + serde::de::DeserializeOwned,
{
	id: Cow<'static, str>,
	component: T,
}

impl<T> Dehydrate<T>
where
	T: Component + serde::Serialize + serde::de::DeserializeOwned,
{
	pub fn new(id: impl Into<Cow<'static, str>>, component: T) -> Dehydrate<T> {
		Dehydrate {
			id: id.into(),
			component,
		}
	}
}

impl<T> Component for Dehydrate<T>
where
	T: Component + serde::Serialize + serde::de::DeserializeOwned,
{
	fn into_node(self) -> Node {
		div()
			.id(self.id)
			.attribute(
				"data-component",
				serde_json::to_string(&self.component).unwrap(),
			)
			.child(self.component)
			.into_node()
	}
}