Skip to main content

scouter_http/
error.rs

1use pyo3::exceptions::PyRuntimeError;
2use pyo3::pyclass::PyClassGuardError;
3use pyo3::PyErr;
4use thiserror::Error;
5#[derive(Error, Debug)]
6pub enum ClientError {
7    #[error(transparent)]
8    HeaderError(#[from] reqwest::header::InvalidHeaderValue),
9
10    #[error(transparent)]
11    ReqwestError(#[from] reqwest::Error),
12
13    #[error("Unauthorized")]
14    Unauthorized,
15
16    #[error("Failed to update auth token")]
17    UpdateAuthTokenError,
18
19    #[error("Failed to insert profile")]
20    InsertProfileError,
21
22    #[error("Failed to update profile")]
23    UpdateProfileError,
24
25    #[error("Failed to get drift alerts")]
26    GetDriftAlertError,
27
28    #[error("Failed to get drift profile")]
29    GetDriftProfileError,
30
31    #[error(transparent)]
32    SerdeQsError(#[from] serde_qs::Error),
33
34    #[error(transparent)]
35    SerdeJsonError(#[from] serde_json::Error),
36
37    #[error("Invalid config type. Expected HttpConfig")]
38    InvalidConfigTypeError,
39
40    #[error("Failed to get drift data")]
41    GetDriftDataError,
42
43    #[error("{0}")]
44    PyError(String),
45
46    #[error(transparent)]
47    UtilError(#[from] scouter_types::error::UtilError),
48
49    #[error("Failed to parse JWT token from response: {0}")]
50    ParseJwtTokenError(String),
51
52    #[error("Failed to get paginated traces")]
53    GetPaginatedTracesError,
54
55    #[error("Failed to refresh trace summary")]
56    RefreshTraceSummaryError,
57
58    #[error("Failed to get trace spans")]
59    GetTraceSpansError,
60
61    #[error("Failed to get trace metrics")]
62    GetTraceMetricsError,
63
64    #[error("Failed to get trace baggage")]
65    GetTraceBaggageError,
66
67    #[error("Failed to get tags")]
68    GetTagsError,
69
70    #[error("Invalid drift type for GenAI task request")]
71    InvalidDriftTypeForGenAITask,
72
73    #[error("Invalid drift type for GenAI workflow request")]
74    GetTraceSpansFromFiltersError,
75}
76
77impl From<ClientError> for PyErr {
78    fn from(err: ClientError) -> PyErr {
79        let msg = err.to_string();
80        PyRuntimeError::new_err(msg)
81    }
82}
83
84impl From<PyErr> for ClientError {
85    fn from(err: PyErr) -> ClientError {
86        ClientError::PyError(err.to_string())
87    }
88}
89
90impl<'a, 'py> From<PyClassGuardError<'a, 'py>> for ClientError {
91    fn from(err: PyClassGuardError<'a, 'py>) -> Self {
92        ClientError::PyError(err.to_string())
93    }
94}