pub struct El3356View<'a> {
pub tare: &'a mut bool,
pub load: &'a f32,
pub load_steady: &'a bool,
pub load_error: &'a bool,
pub load_overrange: &'a bool,
}
#[macro_export]
macro_rules! el3356_view {
($gm:expr, $prefix:ident) => {
paste::paste! {
$crate::fb::beckhoff::El3356View {
tare: &mut $gm.[<$prefix _tare>],
load: & $gm.[<$prefix _load>],
load_steady: & $gm.[<$prefix _load_steady>],
load_error: & $gm.[<$prefix _load_error>],
load_overrange: & $gm.[<$prefix _load_overrange>],
}
}
};
}
#[cfg(test)]
mod tests {
use super::*;
#[derive(Default)]
pub(crate) struct TestPdo {
pub tare: bool,
pub load: f32,
pub load_steady: bool,
pub load_error: bool,
pub load_overrange: bool,
}
impl TestPdo {
pub(crate) fn view(&mut self) -> El3356View<'_> {
El3356View {
tare: &mut self.tare,
load: &self.load,
load_steady: &self.load_steady,
load_error: &self.load_error,
load_overrange: &self.load_overrange,
}
}
}
#[test]
fn view_reads_inputs() {
let mut pdo = TestPdo { load: 42.5, load_steady: true, ..Default::default() };
let view = pdo.view();
assert_eq!(*view.load, 42.5);
assert!(*view.load_steady);
assert!(!*view.load_error);
}
#[test]
fn view_writes_tare() {
let mut pdo = TestPdo::default();
{
let mut view = pdo.view();
*view.tare = true;
}
assert!(pdo.tare);
}
}