#![cfg(not(feature = "openapi"))] use http::Error; use rweb::*; use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize)] struct LoginForm { id: String, password: String, } #[get("/param/{foo}")] fn body_after_path_param(foo: String, #[json] body: LoginForm) -> Result { assert_eq!(body.id, "TEST_ID"); assert_eq!(body.password, "TEST_PASSWORD"); Ok(foo) } #[tokio::test] async fn test_body_after_path_param() { let value = warp::test::request() .path("/param/foo") .body( serde_json::to_vec(&LoginForm { id: "TEST_ID".into(), password: "TEST_PASSWORD".into(), }) .unwrap(), ) .reply(&body_after_path_param()) .await .into_body(); assert_eq!(value, b"foo"[..]); } #[get("/param/{foo}")] fn path_param_after_body(#[json] body: LoginForm, foo: String) -> Result { assert_eq!(body.id, "TEST_ID"); assert_eq!(body.password, "TEST_PASSWORD"); Ok(foo) } #[tokio::test] async fn test_path_param_after_body() { let value = warp::test::request() .path("/param/foo") .body( serde_json::to_vec(&LoginForm { id: "TEST_ID".into(), password: "TEST_PASSWORD".into(), }) .unwrap(), ) .reply(&path_param_after_body()) .await .into_body(); assert_eq!(value, b"foo"[..]); } #[get("/param/{a}/{b}")] fn body_between_path_params(a: u32, #[json] body: LoginForm, b: u32) -> String { assert_eq!(body.id, "TEST_ID"); assert_eq!(body.password, "TEST_PASSWORD"); (a + b).to_string() } #[tokio::test] async fn test_body_between_path_params() { let value = warp::test::request() .path("/param/3/4") .body( serde_json::to_vec(&LoginForm { id: "TEST_ID".into(), password: "TEST_PASSWORD".into(), }) .unwrap(), ) .reply(&body_between_path_params()) .await .into_body(); assert_eq!(value, b"7"[..]); }