use pyo3::prelude::*;
use crate::frontends::python::waveform::PyArraySamples;
#[pyclass(module = "babycat")]
#[derive(Clone, Debug)]
pub struct NumPyNamedResult {
#[pyo3(get)]
pub name: String,
#[pyo3(get)]
pub array: Option<PyArraySamples>,
error: Option<crate::backend::Error>,
}
#[pymethods]
impl NumPyNamedResult {
#[getter]
fn get_exception(&self) -> Option<PyErr> {
self.error.map(PyErr::from)
}
fn __repr__(&self) -> PyResult<String> {
Ok(format!("{}", self))
}
}
impl IntoPy<NumPyNamedResult> for crate::backend::WaveformNamedResult {
fn into_py(self, py: Python<'_>) -> NumPyNamedResult {
match self.result {
Ok(waveform) => NumPyNamedResult {
name: self.name,
array: Some(waveform.into_py(py)),
error: None,
},
Err(err) => NumPyNamedResult {
name: self.name,
array: None,
error: Some(err),
},
}
}
}
impl std::fmt::Display for NumPyNamedResult {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match &self.array {
Some(array) => {
write!(
f,
"<babycat.NumPyNamedResult: name={} array={}>",
self.name, array
)
}
None => match self.error {
Some(error) => {
write!(
f,
"<babycat.NumPyNamedResult name={} error={}>",
self.name, error
)
}
None => {
write!(f, "<babycat.NumPyNamedResult name={}>", self.name,)
}
},
}
}
}