浏览代码

Merge pull request #1055 from Demonthos/fix-hot-reload-svg

Fix hot reloading with namespaces
Jon Kelley 2 年之前
父节点
当前提交
9390820f36
共有 1 个文件被更改,包括 15 次插入0 次删除
  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