Skip to main content

sark_json/
lib.rs

1use http::StatusCode;
2use sark_core::http::Response;
3
4mod body;
5mod encode;
6mod error;
7mod parse;
8mod scan;
9mod traits;
10
11pub use body::InlineToken;
12pub use encode::Encode;
13pub use parse::Parse;
14pub use scan::Scan;
15pub use traits::{JsonDecode, JsonEncode, JsonPreserve, JsonScan};
16
17pub type Result<T> = sark_core::error::Result<T>;
18
19pub struct Json;
20
21impl Json {
22    pub fn ok<T: JsonEncode>(value: T) -> Response {
23        Self::status(StatusCode::OK, value)
24    }
25
26    pub fn ok_preserve<T: JsonEncode + JsonPreserve>(value: T) -> Response {
27        Self::status_preserve(StatusCode::OK, value)
28    }
29
30    pub fn status<T: JsonEncode>(status: StatusCode, value: T) -> Response {
31        let body = value.encode_json();
32        let mut response = Response::new(status);
33        response.content_type("application/json");
34        response.set_body(body);
35        response
36    }
37
38    pub fn status_preserve<T: JsonEncode + JsonPreserve>(status: StatusCode, value: T) -> Response {
39        let body = if let Some(raw) = value.raw_json() {
40            raw.clone()
41        } else {
42            value.encode_json().freeze()
43        };
44        let mut response = Response::new(status);
45        response.content_type("application/json");
46        response.set_body(body);
47        response
48    }
49
50    pub fn bad_request(msg: impl Into<String>) -> sark_core::error::Error {
51        error::Fail::with(msg)
52    }
53}