diff --git a/ruma-api-macros/src/api/request.rs b/ruma-api-macros/src/api/request.rs index d83c678f..793e45fd 100644 --- a/ruma-api-macros/src/api/request.rs +++ b/ruma-api-macros/src/api/request.rs @@ -577,6 +577,12 @@ impl Request { fn try_from_http_request( request: #http::Request> ) -> ::std::result::Result { + if request.method() != #http::Method::#method { + return Err(#ruma_api::error::FromHttpRequestError::MethodMismatch { + expected: #http::Method::#method, + received: request.method().clone(), + }); + } #extract_request_path #extract_request_query #extract_request_headers diff --git a/ruma-api/src/error.rs b/ruma-api/src/error.rs index 9f2046f2..5f2aa95f 100644 --- a/ruma-api/src/error.rs +++ b/ruma-api/src/error.rs @@ -65,6 +65,15 @@ pub enum FromHttpRequestError { /// Deserialization failed #[error("deserialization failed: {0}")] Deserialization(#[from] RequestDeserializationError), + + /// HTTP method mismatch + #[error("http method mismatch: expected {expected}, received: {received}")] + MethodMismatch { + /// expected http method + expected: http::method::Method, + /// received http method + received: http::method::Method, + }, } /// An error that occurred when trying to deserialize a request.