Skip to main content

ferro_rs/http/
mod.rs

1pub mod action;
2mod body;
3pub mod cookie;
4mod extract;
5mod form_request;
6mod multipart;
7mod request;
8pub mod request_context;
9/// API resource and pagination types.
10pub 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/// Error type for missing route parameters
29///
30/// This type is kept for backward compatibility. New code should use
31/// `FrameworkError::param()` instead.
32#[derive(Debug)]
33pub struct ParamError {
34    /// Name of the missing route parameter.
35    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
61/// Create a text response
62pub fn text(body: impl Into<String>) -> Response {
63    Ok(HttpResponse::text(body))
64}
65
66/// Create a JSON response from a serde_json::Value
67pub fn json(body: serde_json::Value) -> Response {
68    Ok(HttpResponse::json(body))
69}
70
71/// Create a binary response from raw bytes.
72///
73/// No default Content-Type is set; add one via `.header()` on the inner `HttpResponse`.
74pub fn bytes(body: impl Into<bytes::Bytes>) -> Response {
75    Ok(HttpResponse::bytes(body))
76}