omg_serde 0.1.0

Adds serde support to omg_core.
Documentation
use anyhow::Result;
use omg_core::data::math::size2d::Size2d;
use serde::{Deserialize, Serialize};

#[derive(new, Debug, Serialize, Deserialize)]
pub struct Size2dSerde {
    width: u32,
    height: u32,
}

impl Size2dSerde {
    pub fn try_convert(&self) -> Result<Size2d> {
        Size2d::new(self.width, self.height)
    }
}

impl From<&Size2d> for Size2dSerde {
    fn from(size: &Size2d) -> Self {
        Size2dSerde {
            width: size.width(),
            height: size.height(),
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use omg_core::data::math::size2d::Size2d;

    #[test]
    fn test_conversion() {
        let start = Size2d::unchecked(1, 2);
        let serde: Size2dSerde = (&start).into();

        assert_eq!(serde.try_convert().unwrap(), start)
    }

    #[test]
    fn test_failed_conversion() {
        let serde = Size2dSerde {
            width: 0,
            height: 1,
        };

        assert!(serde.try_convert().is_err())
    }
}