rsiot/components/cmp_http_server/
error.rs1use std::io::Error as StdIoError;
2
3use axum::{http::StatusCode, response::IntoResponse};
4
5use crate::executor::ComponentError;
6
7use super::COMPONENT_NAME;
8
9#[allow(missing_docs)]
10#[derive(Debug, thiserror::Error)]
11pub enum Error {
12 #[error(transparent)]
14 AxumServe(StdIoError),
15
16 #[error(transparent)]
18 BindPort(StdIoError),
19
20 #[error("Unknown path: {0}")]
21 UnknownPath(String),
22
23 #[error("Not configured: {0}")]
24 NotConfigured(String),
25
26 #[error(transparent)]
27 Message(#[from] crate::message::Error),
28
29 #[error(transparent)]
30 FnInput(anyhow::Error),
31
32 #[error(transparent)]
33 FnOutput(anyhow::Error),
34
35 #[error("HeaderParseError: {0}")]
36 InvalidHeaderValue(axum::http::header::InvalidHeaderValue),
37
38 #[error(transparent)]
39 CmpOutput(#[from] crate::executor::ComponentError),
40
41 #[error("TaskEndAxumServe")]
42 TaskEndAxumServe,
43
44 #[error("TaskEndCmpPlcInput")]
45 TaskEndCmpPlcInput,
46
47 #[error("TaskEndCmpPlcOutput")]
48 TaskEndCmpPlcOutput,
49
50 #[error("TaskEndCmpPlcStatic")]
51 TaskEndCmpPlcStatic,
52
53 #[error("UpdateGetEndpoints")]
54 TaskUpdateGetEndpoints,
55
56 #[error(transparent)]
57 Serde(#[from] crate::serde_utils::Error),
58
59 #[error("{COMPONENT_NAME} | TokioTaskJoin: {0}")]
60 TokioTaskJoin(#[from] tokio::task::JoinError),
61}
62
63impl IntoResponse for Error {
65 fn into_response(self) -> axum::response::Response {
66 let body = self.to_string();
67 (StatusCode::INTERNAL_SERVER_ERROR, body).into_response()
68 }
69}
70
71impl From<Error> for ComponentError {
72 fn from(value: Error) -> Self {
73 ComponentError::Execution(value.to_string())
74 }
75}