gled 2.28.5

gled is an application for creating animations and effects on artnet or dmx installations
use cpal::DeviceId;
use serde::{Deserialize, Serialize, Serializer};
use std::str::FromStr;

pub fn serialize_device_id<S>(device_id: &Option<DeviceId>, s: S) -> Result<S::Ok, S::Error>
where
    S: Serializer,
{
    device_id.as_ref().map(|id| id.to_string()).serialize(s)
}

pub fn deserialize_scene_instances<'de, D>(deserializer: D) -> Result<Option<DeviceId>, D::Error>
where
    D: serde::Deserializer<'de>,
{
    let Some(serialized) = Option::<String>::deserialize(deserializer)? else {
        return Ok(None);
    };
    Ok(DeviceId::from_str(&serialized).ok())
}