#[cfg(feature = "fem")]
use crate::io::Read;
use crate::{
io::{Data, Write},
Update,
};
use lom::LOM;
#[cfg(feature = "fem")]
use std::convert::AsMut;
use std::sync::Arc;
use uid_derive::UID;
impl Update for LOM {}
#[cfg(feature = "fem")]
impl Read<fem::fem_io::OSSM1Lcl> for LOM {
fn read(&mut self, data: Arc<Data<fem::fem_io::OSSM1Lcl>>) {
self.rbm
.as_mut()
.column_mut(0)
.iter_mut()
.take(42)
.zip(&**data)
.for_each(|(rbm, val)| *rbm = *val);
}
}
#[cfg(feature = "fem")]
impl Read<fem::fem_io::MCM2Lcl6D> for LOM {
fn read(&mut self, data: Arc<Data<fem::fem_io::MCM2Lcl6D>>) {
self.rbm
.as_mut()
.column_mut(0)
.iter_mut()
.skip(42)
.zip(&**data)
.for_each(|(rbm, val)| *rbm = *val);
}
}
#[derive(UID)]
pub enum TipTilt {}
impl Write<TipTilt> for LOM {
fn write(&mut self) -> Option<Arc<Data<TipTilt>>> {
Some(Arc::new(Data::new((*self.tiptilt()).clone())))
}
}
#[derive(UID)]
pub enum SegmentTipTilt {}
impl Write<SegmentTipTilt> for LOM {
fn write(&mut self) -> Option<Arc<Data<SegmentTipTilt>>> {
Some(Arc::new(Data::new((*self.segment_tiptilt()).clone())))
}
}
#[cfg(feature = "fsm")]
impl Write<crate::clients::fsm::TTFB> for LOM {
fn write(&mut self) -> Option<Arc<Data<crate::clients::fsm::TTFB>>> {
Some(Arc::new(Data::new((*self.segment_tiptilt()).clone())))
}
}
#[derive(UID)]
pub enum SegmentPiston {}
impl Write<SegmentPiston> for LOM {
fn write(&mut self) -> Option<Arc<Data<SegmentPiston>>> {
Some(Arc::new(Data::new((*self.segment_tiptilt()).clone())))
}
}