mirror of
https://github.com/tokio-rs/axum.git
synced 2026-08-28 00:00:20 +02:00
Backport changes from main to v0.6.x (#2141)
Co-authored-by: David Pedersen <[email protected]>
This commit is contained in:
co-authored by
David Pedersen
parent
a25ed293d7
commit
68333b2fcf
@@ -1,3 +1,5 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use axum::{
|
||||
http::{header, HeaderValue, StatusCode},
|
||||
response::{IntoResponse, Response},
|
||||
@@ -29,21 +31,29 @@ use serde::Serialize;
|
||||
/// }
|
||||
/// ```
|
||||
#[cfg_attr(docsrs, doc(cfg(feature = "erased-json")))]
|
||||
#[derive(Debug)]
|
||||
#[derive(Clone, Debug)]
|
||||
#[must_use]
|
||||
pub struct ErasedJson(serde_json::Result<Bytes>);
|
||||
pub struct ErasedJson(Result<Bytes, Arc<serde_json::Error>>);
|
||||
|
||||
impl ErasedJson {
|
||||
/// Create an `ErasedJson` by serializing a value with the compact formatter.
|
||||
pub fn new<T: Serialize>(val: T) -> Self {
|
||||
let mut bytes = BytesMut::with_capacity(128);
|
||||
Self(serde_json::to_writer((&mut bytes).writer(), &val).map(|_| bytes.freeze()))
|
||||
let result = match serde_json::to_writer((&mut bytes).writer(), &val) {
|
||||
Ok(()) => Ok(bytes.freeze()),
|
||||
Err(e) => Err(Arc::new(e)),
|
||||
};
|
||||
Self(result)
|
||||
}
|
||||
|
||||
/// Create an `ErasedJson` by serializing a value with the pretty formatter.
|
||||
pub fn pretty<T: Serialize>(val: T) -> Self {
|
||||
let mut bytes = BytesMut::with_capacity(128);
|
||||
Self(serde_json::to_writer_pretty((&mut bytes).writer(), &val).map(|_| bytes.freeze()))
|
||||
let result = match serde_json::to_writer_pretty((&mut bytes).writer(), &val) {
|
||||
Ok(()) => Ok(bytes.freeze()),
|
||||
Err(e) => Err(Arc::new(e)),
|
||||
};
|
||||
Self(result)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user