gmt_dos-actors 3.0.0

Giant Magellan Telescope Dynamic Optical Simulation Actor Model
Documentation
use std::vec::IntoIter;

#[cfg(feature = "apache-arrow")]
type MaybeData = Result<Vec<Vec<f64>>, crate::clients::arrow_client::ArrowError>;

#[allow(dead_code)]
#[derive(Debug, Default)]
pub struct GmtState {
    m1_rbm: Option<IntoIter<Vec<f64>>>,
    m2_rbm: Option<IntoIter<Vec<f64>>>,
    m1_mode: Option<IntoIter<Vec<f64>>>,
}
#[cfg(feature = "apache-arrow")]
impl From<crate::clients::arrow_client::Arrow> for GmtState {
    fn from(mut logs: crate::clients::arrow_client::Arrow) -> Self {
        use super::arrow_client::Get;
        let m1_rbm: MaybeData = logs.get("OSSM1Lcl");
        let m2_rbm: MaybeData = logs.get("MCM2Lcl6D");
        let m1_mode: MaybeData = logs.get("M1modes");
        Self {
            m1_rbm: m1_rbm.map(|x| x.into_iter()).ok(),
            m2_rbm: m2_rbm.map(|x| x.into_iter()).ok(),
            m1_mode: m1_mode.map(|x| x.into_iter()).ok(),
        }
    }
}
#[cfg(feature = "apache-arrow")]
impl From<(crate::clients::arrow_client::Arrow, usize, Option<usize>)> for GmtState {
    fn from(
        (mut logs, skip, take): (crate::clients::arrow_client::Arrow, usize, Option<usize>),
    ) -> Self {
        use super::arrow_client::Get;
        let m1_rbm: MaybeData = logs.get_skip_take("OSSM1Lcl", skip, take);
        let m2_rbm: MaybeData = logs.get_skip_take("MCM2Lcl6D", skip, take);
        let m1_mode: MaybeData = logs.get_skip_take("M1modes", skip, take);
        Self {
            m1_rbm: m1_rbm.map(|x| x.into_iter()).ok(),
            m2_rbm: m2_rbm.map(|x| x.into_iter()).ok(),
            m1_mode: m1_mode.map(|x| x.into_iter()).ok(),
        }
    }
}

impl crate::Update for GmtState {}
#[cfg(feature = "fem")]
impl crate::io::Write<fem::fem_io::OSSM1Lcl> for GmtState {
    fn write(&mut self) -> Option<std::sync::Arc<crate::io::Data<fem::fem_io::OSSM1Lcl>>> {
        self.m1_rbm
            .as_mut()
            .and_then(|x| x.next())
            .map(|x| std::sync::Arc::new(crate::io::Data::new(x)))
    }
}
#[cfg(feature = "fem")]
impl crate::io::Write<fem::fem_io::MCM2Lcl6D> for GmtState {
    fn write(&mut self) -> Option<std::sync::Arc<crate::io::Data<fem::fem_io::MCM2Lcl6D>>> {
        self.m2_rbm
            .as_mut()
            .and_then(|x| x.next())
            .map(|x| std::sync::Arc::new(crate::io::Data::new(x)))
    }
}
#[cfg(feature = "ceo")]
impl crate::io::Write<crate::clients::ceo::M1rbm> for GmtState {
    fn write(&mut self) -> Option<std::sync::Arc<crate::io::Data<crate::clients::ceo::M1rbm>>> {
        self.m1_rbm
            .as_mut()
            .and_then(|x| x.next())
            .map(|x| std::sync::Arc::new(crate::io::Data::new(x)))
    }
}
#[cfg(feature = "ceo")]
impl crate::io::Write<crate::clients::ceo::M2rbm> for GmtState {
    fn write(&mut self) -> Option<std::sync::Arc<crate::io::Data<crate::clients::ceo::M2rbm>>> {
        self.m2_rbm
            .as_mut()
            .and_then(|x| x.next())
            .map(|x| std::sync::Arc::new(crate::io::Data::new(x)))
    }
}
#[cfg(feature = "ceo")]
impl crate::io::Write<crate::clients::ceo::M1modes> for GmtState {
    fn write(&mut self) -> Option<std::sync::Arc<crate::io::Data<crate::clients::ceo::M1modes>>> {
        self.m1_mode
            .as_mut()
            .and_then(|x| x.next())
            .map(|x| std::sync::Arc::new(crate::io::Data::new(x)))
    }
}