Browse Source

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

Fix hot reloading with namespaces
Jon Kelley 2 years ago
parent
commit
9390820f36
1 changed files with 15 additions and 0 deletions
  1. 15 0
      packages/core/src/nodes.rs

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

@@ -284,6 +284,17 @@ where
     Ok(&*Box::leak(deserialized))
     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> {
 impl<'a> Template<'a> {
     /// Is this template worth caching at all, since it's completely runtime?
     /// 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
         /// In HTML, this would be a valid URI that defines a namespace for all elements below it
         /// SVG is an example of this namespace
         /// SVG is an example of this namespace
+        #[cfg_attr(
+            feature = "serialize",
+            serde(deserialize_with = "deserialize_option_leaky")
+        )]
         namespace: Option<&'a str>,
         namespace: Option<&'a str>,
 
 
         /// A list of possibly dynamic attribues for this element
         /// A list of possibly dynamic attribues for this element