lindera/
error.rs

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}