omg_serde 0.1.0

Adds serde support to omg_core.
Documentation
use anyhow::Result;
use omg_core::data::math::generator::gradient::Gradient;
use serde::{Deserialize, Serialize};

#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
pub struct GradientSerde {
    start: u32,
    length: u32,
    value_start: u8,
    value_end: u8,
}

impl GradientSerde {
    pub fn try_convert(&self) -> Result<Gradient> {
        Gradient::new(self.start, self.length, self.value_start, self.value_end)
    }
}

impl From<&Gradient> for GradientSerde {
    fn from(gradient: &Gradient) -> Self {
        GradientSerde {
            start: gradient.start(),
            length: gradient.length(),
            value_start: gradient.value_start(),
            value_end: gradient.value_end(),
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use omg_core::data::math::generator::gradient::Gradient;

    #[test]
    fn test_conversion() {
        let start = Gradient::new(1000, 100, 100, 200).unwrap();
        let serde: GradientSerde = (&start).into();

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