inertia_rust/
facade.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
use std::collections::HashMap;

use crate::{Component, InertiaError, InertiaProps};
use async_trait::async_trait;
use serde_json::Value;

#[async_trait(?Send)]
pub trait InertiaFacade<THttpRequest, TResponse, TRedirect> {
    /// Renders an Inertia Page as an HTTP response.
    ///
    /// # Arguments
    /// * `req`         -   A reference to the HTTP request.
    /// * `component`   -   The page javascript component name to be rendered by the
    ///                     client-side adapter.
    ///
    /// # Panic
    /// Panics if Inertia instance hasn't been configured (set to AppData).
    async fn render(req: &THttpRequest, component: Component) -> Result<TResponse, InertiaError>;

    /// Renders an Inertia Page with props as an HTTP response.
    ///
    /// # Arguments
    /// * `req`         -   A reference to the HTTP request.
    /// * `component`   -   The page component to be rendered by the client-side adapter.
    /// * `props`       -   A `TProps` (serializable) struct containing
    ///                     the props to be sent to the client-side.
    ///
    /// # Errors
    /// This operation may result in one of InertiaErrors if the props struct
    /// or any of its fields don't implement [`Serialize`] trait.
    ///
    /// # Panics
    /// Panics if Inertia instance hasn't been configured (set to AppData).
    ///
    /// [`Serialize`]: serde::Serialize
    async fn render_with_props(
        req: &THttpRequest,
        component: Component,
        props: InertiaProps<'_>,
    ) -> Result<TResponse, InertiaError>;

    /// Provokes a client-side redirect to an extern URL.
    ///
    /// # Arguments
    /// * `req`     - A reference to the HTTP request.
    /// * `url`     - The URL to be redirected to.
    fn location(req: &THttpRequest, url: &str) -> TResponse;

    /// Whether to encrypt or not the current request. Refer to [History Encrypt] for more
    /// details.
    ///
    /// [History Encrypt]: https://kaiofelps.github.io/inertia-rust/history-encrypt
    fn encrypt_history(req: &THttpRequest, encrypt: bool);

    /// Triggers a history clearing from server-side. Refer to [History Encrypt] for more
    /// details.
    ///
    /// [History Encrypt]: https://kaiofelps.github.io/inertia-rust/history-encrypt#clearing-history
    fn clear_history(req: &THttpRequest);

    /// Triggers a redirect to the previous URL (or "/", if there is no previous URL).
    /// Please refer to [Flash Messages and Validation Errors] for more information.
    ///
    /// [Flash Messages and Validation Errors]: https://kaiofelps.github.io/inertia-rust/advanced/flash-messages.html
    fn back(req: &THttpRequest) -> TRedirect;

    /// Triggers a redirect to the previous URL (or "/", if there is no previous URL) with
    /// errors. Please refer to [Flash Messages and Validation Errors] for more information.
    ///
    /// [Flash Messages and Validation Errors]: https://kaiofelps.github.io/inertia-rust/advanced/flash-messages.html
    fn back_with_errors(req: &THttpRequest, errors: HashMap<&str, Value>) -> TRedirect;
}