gnuplotter_core 0.2.3-alpha

Dependency for gnuplotter
Documentation
use crate::maybe::Maybe::Nothing;

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Maybe<T> {
    Value(T),
    Nothing
}

impl<T> Maybe<T> {
    pub fn value(value: T) -> Self {
        Maybe::Value(value)
    }

    pub fn update<S>(&mut self, value: S) where S: Into<T> {
        std::mem::swap(self, &mut Maybe::Value(value.into()));
    }

    pub fn unwrap(self) -> T {
        match self {
            Maybe::Value(value) => value,
            Maybe::Nothing => panic!("Tried to unwrap a Maybe::Nothing value.")
        }
    }
}

pub mod maybe_conversions {
    use crate::gnu::command::title::Title;
    use crate::maybe::Maybe;

    impl<'a,T> From<&'a str> for Maybe<T>
    where
        T: From<&'a str>
    {
        fn from(value: &'a str) -> Self {
            Maybe::Value(T::from(value))
        }
    }
}

impl<T> Default for Maybe<T> {
    fn default() -> Self {
        Maybe::Nothing
    }
}

#[cfg(test)]
mod tests {
    use crate::prelude::Required;
    use super::*;

    #[test]
    fn test_a_maybe_can_be_constructed() {
        assert_eq!(Maybe::value(1), Maybe::Value(1));
    }

    #[test]
    fn test_an_empty_maybe_can_be_updated() {
        let mut maybe: Maybe<i32> = Maybe::Nothing;
        maybe.update(123);
        assert_eq!(maybe, Maybe::Value(123));
    }

    #[test]
    fn test_a_maybe_can_be_updated(){
        let mut maybe: Maybe<i32> = Maybe::value(123);
        maybe.update(456);
        assert_eq!(maybe, Maybe::Value(456));
    }

    #[test]
    fn test_updating_convertable_value(){
        let mut maybe = Maybe::<String>::Nothing;
        maybe.update("something that can be converted");

        assert_eq!(maybe, Maybe::Value(String::from("something that can be converted")));
    }

    mod conversions {
        use super::super::*;

        #[test]
        fn test_an_str_can_be_converted_into_a_maybe_string() {
            let s = "Hello, world!";
            let maybe_s: Maybe<String> = s.into();
            assert_eq!(maybe_s, Maybe::Value(String::from(s)));
        }
    }
}