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