use crate::Error;
pub(super) async fn parse_full_response<T>(resp: reqwest::Response) -> Result<T, Error>
where
T: serde::de::DeserializeOwned,
{
let body_t0 = std::time::Instant::now();
let bytes = resp.bytes().await?;
let body_size = bytes.len();
aube_util::diag::event_lazy(
aube_util::diag::Category::Registry,
"http_body_read",
body_t0.elapsed(),
|| format!(r#"{{"bytes":{}}}"#, body_size),
);
let parse_t0 = std::time::Instant::now();
let result = sonic_rs::from_slice::<T>(&bytes)
.map_err(|e| Error::Io(std::io::Error::new(std::io::ErrorKind::InvalidData, e)));
aube_util::diag::event_lazy(
aube_util::diag::Category::Registry,
"json_parse_sonic_rs",
parse_t0.elapsed(),
|| format!(r#"{{"bytes":{}}}"#, body_size),
);
result
}