Backport changes from main to v0.6.x (#2141)

Co-authored-by: David Pedersen <[email protected]>
This commit is contained in:
Jonas Platte
2023-08-03 10:17:27 +02:00
committed by GitHub
co-authored by David Pedersen
parent a25ed293d7
commit 68333b2fcf
5 changed files with 74 additions and 5 deletions
+14 -4
View File
@@ -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)
}
}