stock-trek 0.2.5

Stock Trek time-series analysis
Documentation
#[cfg(feature = "python")]
use {
    crate::{
        bindings::python::dto::py_raw_market_tick::PyRawMarketTick,
        market_data::market_ticks::MarketTicks,
    },
    pyo3::{prelude::*, pyclass, pymethods, types::PyList, Python},
};

#[cfg(feature = "python")]
#[pyclass(name = "MarketTicks")]
pub struct PyMarketTicks {
    inner: MarketTicks,
}

#[cfg(feature = "python")]
#[pymethods]
impl PyMarketTicks {
    pub fn exact(&self, py: Python<'_>) -> Py<PyList> {
        let py_ticks: Vec<_> = self
            .inner
            .exact()
            .iter()
            .map(|tick| PyRawMarketTick::from(tick))
            .collect();
        PyList::new(py, py_ticks).unwrap().into()
    }
    pub fn bids(&self, py: Python<'_>) -> Py<PyList> {
        let list = PyList::empty(py);
        for bid in self.inner.bids() {
            let bid_list = PyList::empty(py);
            bid_list.add(bid.0).unwrap();
            bid_list.add(bid.1).unwrap();
            bid_list.add(bid.2).unwrap();
            list.add(bid_list).unwrap();
        }
        list.into()
    }
    pub fn asks(&self, py: Python<'_>) -> Py<PyList> {
        let list = PyList::empty(py);
        for bid in self.inner.asks() {
            let ask_list = PyList::empty(py);
            ask_list.add(bid.0).unwrap();
            ask_list.add(bid.1).unwrap();
            ask_list.add(bid.2).unwrap();
            list.add(ask_list).unwrap();
        }
        list.into()
    }
    pub fn lasts(&self, py: Python<'_>) -> Py<PyList> {
        let list = PyList::empty(py);
        for last in self.inner.lasts() {
            let last_list = PyList::empty(py);
            last_list.add(last.0).unwrap();
            last_list.add(last.1).unwrap();
            last_list.add(last.2).unwrap();
            list.add(last_list).unwrap();
        }
        list.into()
    }
}

#[cfg(feature = "python")]
impl From<&MarketTicks> for PyMarketTicks {
    fn from(ticks: &MarketTicks) -> Self {
        Self {
            inner: ticks.to_owned(),
        }
    }
}

#[cfg(feature = "python")]
impl PyMarketTicks {
    pub fn new_py(py: Python<'_>, ticks: &MarketTicks) -> PyResult<Py<Self>> {
        Py::new(py, PyMarketTicks::from(ticks))
    }
}