apigate_core/error/
pipeline_runtime.rs1use 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}