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