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