dioxus-core-template 0.8.0-alpha.2

Static template representation and const builder for Dioxus.
Documentation
#[cfg(feature = "serialize")]
pub fn deserialize_string_leaky<'de, D>(deserializer: D) -> Result<&'static str, D::Error>
where
    D: serde::Deserializer<'de>,
{
    use serde::Deserialize;

    let deserialized = String::deserialize(deserializer)?;
    Ok(&*Box::leak(deserialized.into_boxed_str()))
}

#[cfg(feature = "serialize")]
pub(crate) fn deserialize_leaky<'de, T, D>(deserializer: D) -> Result<&'static [T], D::Error>
where
    T: serde::Deserialize<'de>,
    D: serde::Deserializer<'de>,
{
    use serde::Deserialize;

    let deserialized = Box::<[T]>::deserialize(deserializer)?;
    Ok(&*Box::leak(deserialized))
}

#[cfg(feature = "serialize")]
pub(crate) fn deserialize_strings_leaky<'de, D>(
    deserializer: D,
) -> Result<&'static [&'static str], D::Error>
where
    D: serde::Deserializer<'de>,
{
    use serde::Deserialize;

    let deserialized = Vec::<String>::deserialize(deserializer)?;
    let strings: Vec<&'static str> = deserialized
        .into_iter()
        .map(|string| &*Box::leak(string.into_boxed_str()))
        .collect::<Vec<_>>();
    Ok(&*Box::leak(strings.into_boxed_slice()))
}

#[cfg(feature = "serialize")]
pub fn deserialize_option_leaky<'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())))
}