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