#[cfg(feature = "tracing")]
use crate::result::ApiResult;
#[cfg(feature = "tracing")]
pub trait ApiResultTracing<T> {
fn with_tracing(self) -> Self;
}
#[cfg(feature = "tracing")]
impl<T> ApiResultTracing<T> for ApiResult<T> {
fn with_tracing(self) -> Self {
if !self.success {
let code = self.code.unwrap_or(0);
let message = self.message.as_deref().unwrap_or("Unknown error");
let trace = self.trace_id.as_deref().unwrap_or("-");
if code >= 500 {
tracing::error!(
code = code,
trace_id = trace,
biz_code = ?self.biz_code,
"API error: {}",
message
);
} else {
tracing::warn!(
code = code,
trace_id = trace,
biz_code = ?self.biz_code,
"API error: {}",
message
);
}
}
self
}
}