switch-hal 0.4.0

HAL and basic implementations for input and output switches (buttons, switches, leds, transistors)
Documentation
extern crate switch_hal;

use switch_hal::mock;

mod active_high_switch {
    use super::*;
    use embedded_hal::digital::v2::InputPin;
    use switch_hal::{ActiveHigh, OutputSwitch, Switch};

    #[test]
    fn when_on_pin_is_high() {
        let pin = mock::Pin::new();

        let mut led = Switch::<_, ActiveHigh>::new(pin);
        led.on().unwrap();

        let pin = led.into_pin();
        assert_eq!(true, pin.is_high().unwrap());
    }

    #[test]
    fn when_off_pin_is_low() {
        let pin = mock::Pin::new();

        let mut led = Switch::<_, ActiveHigh>::new(pin);
        led.off().unwrap();

        let pin = led.into_pin();
        assert_eq!(true, pin.is_low().unwrap());
    }

    #[test]
    fn is_toggleable() {
        use switch_hal::ToggleableOutputSwitch;

        let pin = mock::Pin::new();

        let mut led = Switch::<_, ActiveHigh>::new(pin);
        led.off().unwrap();

        led.toggle().unwrap();

        let pin = led.into_pin();
        assert_eq!(true, pin.is_high().unwrap());
    }

    #[test]
    fn not_on_when_low() {
        use switch_hal::StatefulOutputSwitch;

        let pin = mock::Pin::new();

        let mut led = Switch::<_, ActiveHigh>::new(pin);
        led.off().unwrap();

        assert_eq!(false, led.is_on().unwrap());

        let pin = led.into_pin();
        assert_eq!(false, pin.is_high().unwrap());
    }

    #[test]
    fn is_on_when_high() {
        use switch_hal::StatefulOutputSwitch;

        let pin = mock::Pin::new();

        let mut led = Switch::<_, ActiveHigh>::new(pin);
        led.on().unwrap();

        assert_eq!(true, led.is_on().unwrap());

        let pin = led.into_pin();
        assert_eq!(true, pin.is_high().unwrap());
    }
}

mod active_low_switch {
    use super::*;
    use embedded_hal::digital::v2::InputPin;
    use switch_hal::{ActiveLow, OutputSwitch, Switch};

    #[test]
    fn when_on_pin_is_low() {
        let pin = mock::Pin::new();

        let mut led = Switch::<_, ActiveLow>::new(pin);
        led.on().unwrap();

        let pin = led.into_pin();
        assert_eq!(true, pin.is_low().unwrap());
    }

    #[test]
    fn when_off_pin_is_high() {
        let pin = mock::Pin::new();

        let mut led = Switch::<_, ActiveLow>::new(pin);
        led.off().unwrap();

        let pin = led.into_pin();
        assert_eq!(true, pin.is_high().unwrap());
    }

    #[test]
    fn is_toggleable() {
        use switch_hal::ToggleableOutputSwitch;

        let pin = mock::Pin::new();

        let mut led = Switch::<_, ActiveLow>::new(pin);
        led.off().unwrap();

        led.toggle().unwrap();

        let pin = led.into_pin();
        assert_eq!(true, pin.is_low().unwrap());
    }

    #[test]
    fn not_on_when_high() {
        use switch_hal::StatefulOutputSwitch;

        let pin = mock::Pin::new();

        let mut led = Switch::<_, ActiveLow>::new(pin);
        led.off().unwrap();

        assert_eq!(false, led.is_on().unwrap());

        let pin = led.into_pin();
        assert_eq!(false, pin.is_low().unwrap());
    }

    #[test]
    fn is_on_when_low() {
        use switch_hal::StatefulOutputSwitch;

        let pin = mock::Pin::new();

        let mut led = Switch::<_, ActiveLow>::new(pin);
        led.on().unwrap();

        assert_eq!(true, led.is_on().unwrap());

        let pin = led.into_pin();
        assert_eq!(true, pin.is_low().unwrap());
    }
}