rsiot/components/cmp_http_server/
error.rs

1use std::io::Error as StdIoError;
2
3use axum::{http::StatusCode, response::IntoResponse};
4
5#[allow(missing_docs)]
6#[derive(Debug, thiserror::Error)]
7pub enum Error {
8    /// Ошибка Axum
9    #[error(transparent)]
10    AxumServe(StdIoError),
11
12    /// Ошибка привязки к порту
13    #[error(transparent)]
14    BindPort(StdIoError),
15
16    #[error("Unknown path: {0}")]
17    UnknownPath(String),
18
19    #[error("Not configured: {0}")]
20    NotConfigured(String),
21
22    #[error(transparent)]
23    Message(#[from] crate::message::Error),
24
25    #[error(transparent)]
26    FnInput(anyhow::Error),
27
28    #[error(transparent)]
29    FnOutput(anyhow::Error),
30
31    #[error(transparent)]
32    CmpOutput(#[from] crate::executor::ComponentError),
33
34    #[error("TaskEndAxumServe")]
35    TaskEndAxumServe,
36
37    #[error("TaskEndCmpPlcInput")]
38    TaskEndCmpPlcInput,
39
40    #[error("TaskEndCmpPlcOutput")]
41    TaskEndCmpPlcOutput,
42
43    #[error("TaskEndCmpPlcStatic")]
44    TaskEndCmpPlcStatic,
45
46    #[error("UpdateGetEndpoints")]
47    TaskUpdateGetEndpoints,
48
49    #[error(transparent)]
50    Serde(#[from] crate::serde_utils::Error),
51}
52
53/// Преобразование ошибки в понятный пользователю ответ
54impl IntoResponse for Error {
55    fn into_response(self) -> axum::response::Response {
56        let body = self.to_string();
57        (StatusCode::INTERNAL_SERVER_ERROR, body).into_response()
58    }
59}