use std::path::PathBuf;
use pyo3::{
Bound, PyAny, PyErr, PyResult, exceptions::PyValueError, pyclass, pymethods,
types::PyAnyMethods,
};
use crate::ephem::spk::parser::{DafSpkError, Spk};
pub struct PyDafSpkError(pub DafSpkError);
impl From<PyDafSpkError> for PyErr {
fn from(err: PyDafSpkError) -> Self {
PyValueError::new_err(err.0.to_string())
}
}
#[pyclass(name = "SPK", module = "lox_space", frozen)]
pub struct PySpk(pub Spk);
#[pymethods]
impl PySpk {
#[new]
fn new(path: &Bound<'_, PyAny>) -> PyResult<Self> {
let path = path.extract::<PathBuf>()?;
let spk = Spk::from_file(path).map_err(PyDafSpkError)?;
Ok(PySpk(spk))
}
fn __repr__(&self) -> String {
let n: usize = self
.0
.segments
.values()
.map(|m| m.values().map(|v| v.len()).sum::<usize>())
.sum();
format!("SPK({n} segments)")
}
}