Browse Source

fix hot reloading with namespaces

Evan Almloff 2 năm trước cách đây
mục cha
commit
382d5cb8c5
1 tập tin đã thay đổi với 15 bổ sung0 xóa
  1. 15 0
      packages/core/src/nodes.rs

+ 15 - 0
packages/core/src/nodes.rs

@@ -284,6 +284,17 @@ where
     Ok(&*Box::leak(deserialized))
 }
 
+#[cfg(feature = "serialize")]
+fn deserialize_option_leaky<'a, 'de, D>(deserializer: D) -> Result<Option<&'static str>, D::Error>
+where
+    D: serde::Deserializer<'de>,
+{
+    use serde::Deserialize;
+
+    let deserialized = Option::<String>::deserialize(deserializer)?;
+    Ok(deserialized.map(|deserialized| &*Box::leak(deserialized.into_boxed_str())))
+}
+
 impl<'a> Template<'a> {
     /// Is this template worth caching at all, since it's completely runtime?
     ///
@@ -319,6 +330,10 @@ pub enum TemplateNode<'a> {
         ///
         /// In HTML, this would be a valid URI that defines a namespace for all elements below it
         /// SVG is an example of this namespace
+        #[cfg_attr(
+            feature = "serialize",
+            serde(deserialize_with = "deserialize_option_leaky")
+        )]
         namespace: Option<&'a str>,
 
         /// A list of possibly dynamic attribues for this element