feat: improved APIResult error reporting and use tracing
This commit is contained in:
parent
c2b458323f
commit
651bd656c2
1 changed files with 25 additions and 14 deletions
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
use kxio::{net::Response, print::Printer};
|
use kxio::{net::Response, print::Printer};
|
||||||
|
|
||||||
use crate::{e, s};
|
use crate::s;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub(crate) struct APIResult<T>
|
pub(crate) struct APIResult<T>
|
||||||
|
@ -16,23 +16,34 @@ impl<T> APIResult<T>
|
||||||
where
|
where
|
||||||
T: for<'a> serde::Deserialize<'a>,
|
T: for<'a> serde::Deserialize<'a>,
|
||||||
{
|
{
|
||||||
pub async fn new(response: kxio::net::Result<Response>, prt: &Printer) -> Self {
|
pub async fn new(response: kxio::net::Result<Response>, _prt: &Printer) -> Self {
|
||||||
match response {
|
match response {
|
||||||
Ok(response) => {
|
Ok(response) => {
|
||||||
let text = response.text().await.unwrap_or_default();
|
tracing::trace!(status = %response.status());
|
||||||
let text = if text.is_empty() { s!("null") } else { text };
|
match response.status().as_u16() {
|
||||||
let result = serde_json::from_str::<T>(&text)
|
200..=299 => {
|
||||||
.map_err(|e| e.to_string())
|
let text = response.text().await.unwrap_or_default();
|
||||||
.map_err(|e| {
|
let text = if text.is_empty() { s!("null") } else { text };
|
||||||
e!(prt, "{e}: {text}");
|
let result = serde_json::from_str::<T>(&text)
|
||||||
e
|
.map_err(|e| e.to_string())
|
||||||
})
|
.map_err(|e| {
|
||||||
.map_err(kxio::net::Error::from)
|
tracing::error!(error=%e, %text, "APIResult serde_json");
|
||||||
.map_err(kxio::Error::from);
|
e
|
||||||
Self { text, result }
|
})
|
||||||
|
.map_err(kxio::net::Error::from)
|
||||||
|
.map_err(kxio::Error::from);
|
||||||
|
Self { text, result }
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
let status = response.status();
|
||||||
|
let text = response.text().await.unwrap_or_default();
|
||||||
|
tracing::warn!(%status, %text, "APIResult unsuccessful");
|
||||||
|
Self::error(kxio::Error::Net(kxio::net::Error::Request(text)))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
e!(prt, "err: {e:#?}");
|
tracing::error!(?e, "APIResult err");
|
||||||
Self::error(e.into())
|
Self::error(e.into())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue