bevy_ecs_ldtk 0.14.0

An ECS-friendly ldtk plugin for bevy.
Documentation
use bevy::prelude::*;
use serde::{de, Deserialize, Deserializer, Serialize, Serializer};

pub(crate) fn serialize<S: Serializer>(color: &Color, serializer: S) -> Result<S::Ok, S::Error> {
    color.to_srgba().to_hex().serialize(serializer)
}

pub(crate) fn deserialize<'de, D>(deserializer: D) -> Result<Color, D::Error>
where
    D: Deserializer<'de>,
{
    Srgba::hex(String::deserialize(deserializer)?)
        .map(|c| c.into())
        .map_err(|_| de::Error::custom("Encountered HexColorError"))
}

pub mod optional {
    use bevy::prelude::*;
    use serde::{Deserialize, Deserializer, Serializer};

    pub(crate) fn serialize<S: Serializer>(
        color: &Option<Color>,
        serializer: S,
    ) -> Result<S::Ok, S::Error> {
        if let Some(color) = color {
            super::serialize(color, serializer)
        } else {
            serializer.serialize_none()
        }
    }

    pub(crate) fn deserialize<'de, D>(deserializer: D) -> Result<Option<Color>, D::Error>
    where
        D: Deserializer<'de>,
    {
        #[derive(Deserialize)]
        struct Wrapper(#[serde(with = "super")] Color);

        let c: Option<Wrapper> = Option::deserialize(deserializer)?;
        Ok(c.map(|c| c.0))
    }
}