1mod body;
2pub mod cookie;
3mod extract;
4mod form_request;
5mod multipart;
6mod request;
7pub mod request_context;
8pub mod resources;
10mod response;
11
12pub use body::{collect_body, parse_form, parse_json};
13pub use cookie::{parse_cookies, Cookie, CookieOptions, SameSite};
14pub use extract::{FromParam, FromRequest};
15pub use form_request::FormRequest;
16pub use multipart::{validate_mime, validate_size, MultipartForm, UploadedFile};
17pub use request::{Request, RequestParts};
18pub use request_context::request_host;
19pub use resources::{PaginationLinks, PaginationMeta, Resource, ResourceCollection, ResourceMap};
20pub use response::{
21 HttpResponse, InertiaRedirect, Redirect, RedirectRouteBuilder, Response, ResponseExt,
22};
23
24#[derive(Debug)]
29pub struct ParamError {
30 pub param_name: String,
32}
33
34impl From<ParamError> for HttpResponse {
35 fn from(err: ParamError) -> HttpResponse {
36 HttpResponse::json(serde_json::json!({
37 "error": format!("Missing required parameter: {}", err.param_name)
38 }))
39 .status(400)
40 }
41}
42
43impl From<ParamError> for crate::error::FrameworkError {
44 fn from(err: ParamError) -> crate::error::FrameworkError {
45 crate::error::FrameworkError::ParamError {
46 param_name: err.param_name,
47 }
48 }
49}
50
51impl From<ParamError> for Response {
52 fn from(err: ParamError) -> Response {
53 Err(HttpResponse::from(crate::error::FrameworkError::from(err)))
54 }
55}
56
57pub fn text(body: impl Into<String>) -> Response {
59 Ok(HttpResponse::text(body))
60}
61
62pub fn json(body: serde_json::Value) -> Response {
64 Ok(HttpResponse::json(body))
65}
66
67pub fn bytes(body: impl Into<bytes::Bytes>) -> Response {
71 Ok(HttpResponse::bytes(body))
72}