Skip to main content

rustbasic_core/
responses.rs

1use serde::Serialize;
2use crate::router::{Response, IntoResponse, Html, Json, Redirect};
3use crate::session::Session;
4
5pub struct ResponseHelper;
6
7impl ResponseHelper {
8    /// Mengembalikan tampilan HTML (Minijinja)
9    #[allow(dead_code)]
10    pub fn view(html_content: String) -> Response {
11        Html(html_content).into_response()
12    }
13
14    /// Mengembalikan data JSON
15    pub fn json<T: Serialize>(data: T) -> Response {
16        Json(data).into_response()
17    }
18
19    /// Melakukan pengalihan (Redirect)
20    #[allow(dead_code)]
21    pub fn redirect(url: &str) -> Response {
22        Redirect::to(url).into_response()
23    }
24
25    /// Mengembalikan pesan sukses sederhana
26    #[allow(dead_code)]
27    pub fn success(message: &str) -> Response {
28        Json(serde_json::json!({
29            "status": "success",
30            "message": message
31        })).into_response()
32    }
33
34    #[allow(dead_code)]
35    pub fn not_found() -> Response {
36        Json(serde_json::json!({
37            "status": "error",
38            "message": "Resource not found"
39        })).into_response()
40    }
41
42    #[allow(dead_code)]
43    pub fn error(message: &str) -> Response {
44        Json(serde_json::json!({
45            "status": "error",
46            "message": message
47        })).into_response()
48    }
49
50    #[allow(dead_code)]
51    pub fn internal_server_error() -> Response {
52        Json(serde_json::json!({
53            "status": "error",
54            "message": "Internal server error"
55        })).into_response()
56    }
57
58    /// Redirect dengan pesan sukses (Flash Message)
59    pub fn redirect_with_success(
60        url: &str, 
61        message: &str, 
62        session: Session
63    ) -> Response {
64        session.set("flash_success", message);
65        Redirect::to(url).into_response()
66    }
67
68    /// Redirect dengan pesan error (Flash Message)
69    pub fn redirect_with_error(
70        url: &str, 
71        message: &str, 
72        session: Session
73    ) -> Response {
74        session.set("flash_error", message);
75        Redirect::to(url).into_response()
76    }
77}