Skip to main content

apigate_core/error/
pipeline_runtime.rs

1use http::StatusCode;
2use thiserror::Error;
3
4#[derive(Debug, Clone, PartialEq, Eq, Error)]
5pub enum ApigatePipelineError {
6    #[error("missing value in request scope")]
7    MissingFromScope(&'static str),
8    #[error("request body already consumed")]
9    RequestBodyAlreadyConsumed,
10    #[error("request body is too large")]
11    RequestBodyTooLarge(String),
12    #[error("invalid json body")]
13    InvalidJsonBody(String),
14    #[error("failed to serialize mapped json")]
15    FailedSerializeMappedJson(String),
16    #[error("invalid query")]
17    InvalidQuery(String),
18    #[error("failed to serialize mapped query")]
19    FailedSerializeMappedQuery(String),
20    #[error("failed to rebuild uri")]
21    FailedRebuildUri(String),
22    #[error("expected application/x-www-form-urlencoded")]
23    ExpectedFormUrlEncoded,
24    #[error("invalid form query")]
25    InvalidFormQuery(String),
26    #[error("failed to serialize mapped form")]
27    FailedSerializeMappedForm(String),
28    #[error("invalid form body")]
29    InvalidFormBody(String),
30}
31
32impl ApigatePipelineError {
33    pub fn user_message(&self) -> &'static str {
34        match self {
35            Self::MissingFromScope(_) => "missing value in request scope",
36            Self::RequestBodyAlreadyConsumed => "request body already consumed",
37            Self::RequestBodyTooLarge(_) => "request body is too large",
38            Self::InvalidJsonBody(_) => "invalid json body",
39            Self::FailedSerializeMappedJson(_) => "failed to serialize mapped json",
40            Self::InvalidQuery(_) => "invalid query",
41            Self::FailedSerializeMappedQuery(_) => "failed to serialize mapped query",
42            Self::FailedRebuildUri(_) => "failed to rebuild uri",
43            Self::ExpectedFormUrlEncoded => "expected application/x-www-form-urlencoded",
44            Self::InvalidFormQuery(_) => "invalid form query",
45            Self::FailedSerializeMappedForm(_) => "failed to serialize mapped form",
46            Self::InvalidFormBody(_) => "invalid form body",
47        }
48    }
49
50    pub fn debug_details(&self) -> Option<&str> {
51        match self {
52            Self::MissingFromScope(ty) => Some(ty),
53            Self::RequestBodyTooLarge(detail)
54            | Self::InvalidJsonBody(detail)
55            | Self::FailedSerializeMappedJson(detail)
56            | Self::InvalidQuery(detail)
57            | Self::FailedSerializeMappedQuery(detail)
58            | Self::FailedRebuildUri(detail)
59            | Self::InvalidFormQuery(detail)
60            | Self::FailedSerializeMappedForm(detail)
61            | Self::InvalidFormBody(detail) => Some(detail.as_str()),
62            Self::RequestBodyAlreadyConsumed | Self::ExpectedFormUrlEncoded => None,
63        }
64    }
65
66    pub fn status_code(&self) -> StatusCode {
67        match self {
68            Self::MissingFromScope(_) => StatusCode::INTERNAL_SERVER_ERROR,
69            Self::RequestBodyAlreadyConsumed
70            | Self::FailedSerializeMappedJson(_)
71            | Self::FailedSerializeMappedQuery(_)
72            | Self::FailedRebuildUri(_)
73            | Self::FailedSerializeMappedForm(_) => StatusCode::INTERNAL_SERVER_ERROR,
74            Self::RequestBodyTooLarge(_) => StatusCode::PAYLOAD_TOO_LARGE,
75            Self::ExpectedFormUrlEncoded => StatusCode::UNSUPPORTED_MEDIA_TYPE,
76            Self::InvalidJsonBody(_)
77            | Self::InvalidQuery(_)
78            | Self::InvalidFormQuery(_)
79            | Self::InvalidFormBody(_) => StatusCode::BAD_REQUEST,
80        }
81    }
82
83    pub fn code(&self) -> &'static str {
84        match self {
85            Self::MissingFromScope(_) => "missing_from_scope",
86            Self::RequestBodyAlreadyConsumed => "request_body_already_consumed",
87            Self::RequestBodyTooLarge(_) => "request_body_too_large",
88            Self::InvalidJsonBody(_) => "invalid_json_body",
89            Self::FailedSerializeMappedJson(_) => "serialize_mapped_json_failed",
90            Self::InvalidQuery(_) => "invalid_query",
91            Self::FailedSerializeMappedQuery(_) => "serialize_mapped_query_failed",
92            Self::FailedRebuildUri(_) => "rebuild_uri_failed",
93            Self::ExpectedFormUrlEncoded => "expected_form_urlencoded",
94            Self::InvalidFormQuery(_) => "invalid_form_query",
95            Self::FailedSerializeMappedForm(_) => "serialize_mapped_form_failed",
96            Self::InvalidFormBody(_) => "invalid_form_body",
97        }
98    }
99}