1use std::fmt;
2
3use pyo3::exceptions::PyException;
4use pyo3::prelude::*;
5
6#[pyclass(name = "LinderaError")]
7#[derive(Debug, Clone)]
8pub struct PyLinderaError {
9 message: String,
10}
11
12#[pymethods]
13impl PyLinderaError {
14 #[new]
15 pub fn new(message: String) -> Self {
16 PyLinderaError { message }
17 }
18
19 #[getter]
20 pub fn message(&self) -> &str {
21 &self.message
22 }
23
24 fn __str__(&self) -> String {
25 self.message.clone()
26 }
27
28 fn __repr__(&self) -> String {
29 format!("LinderaError('{}')", self.message)
30 }
31}
32
33impl fmt::Display for PyLinderaError {
34 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
35 write!(f, "{}", self.message)
36 }
37}
38
39impl std::error::Error for PyLinderaError {}
40
41impl From<PyLinderaError> for PyErr {
42 fn from(err: PyLinderaError) -> PyErr {
43 PyException::new_err(err.message)
44 }
45}