use serde::Serialize;
use crate::error::ErrorEnvelope;
#[derive(Debug, Serialize)]
pub struct JsonEnvelope<'a, T: Serialize + ?Sized> {
pub ok: bool,
pub profile: Option<&'a str>,
pub data: &'a T,
}
pub fn render_success<T>(profile: Option<&str>, data: &T, compact: bool) -> String
where
T: Serialize + ?Sized,
{
let envelope = JsonEnvelope {
ok: true,
profile,
data,
};
serialize(&envelope, compact)
}
pub fn render_failure(envelope: &ErrorEnvelope<'_>, compact: bool) -> String {
serialize(envelope, compact)
}
fn serialize<T>(value: &T, compact: bool) -> String
where
T: Serialize + ?Sized,
{
if compact {
serde_json::to_string(value)
} else {
serde_json::to_string_pretty(value)
}
.expect("envelope serialization cannot fail for well-formed models")
}