owon-spe 0.1.0

OWON SPE programmable power-suppy api crate
Documentation
pub mod iee4882;
pub mod measure;
pub mod output;

macro_rules! query_digit_operation {
    ($op:ident, $query:literal, $out:ident) => {
        pub(crate) struct $op {}
        impl Operation for $op {
            type Out = $out;

            fn command(&self) -> Cow<'_, str> {
                Cow::Borrowed($query)
            }

            fn parse_line(&self, line: &str) -> Result<Self::Out, Error> {
                line.parse().map_err(|_| Error::UnexpectedData)
            }
        }
    };
}

pub(crate) use query_digit_operation;

pub(crate) fn parse_bool(data: &str) -> Option<bool> {
    match data {
        "ON" | "1" => Some(true),
        "OFF" | "0" => Some(false),
        _ => None,
    }
}

#[cfg(test)]
fn test_states<O>(op: O, states: &[(&str, Result<O::Out, crate::Error>)])
where
    O: crate::Operation,
{
    use crate::Error;

    for s in states {
        let out = op.parse_line(s.0);
        match (&s.1, &out) {
            (Ok(expected), Ok(out)) => assert_eq!(expected, out, "Input: {}", s.0),
            (Err(Error::UnexpectedData), Err(Error::UnexpectedData)) => (),
            (expected, out) => panic!("Expected: {:?} got {:?} for {}", expected, out, s.0),
        }
    }
}