use std::borrow::Cow;
use serde::{Deserialize, Serialize};
use crate::DetailedError;
pub mod client;
mod debug_logger;
pub mod injector;
pub use client::{
HttpClient, HttpClientBuilder, NoopTransportLogger, TransportLogEvent, TransportLogger,
debug_log_reqwest_request, debug_log_reqwest_response, default_transport_logger,
set_default_transport_logger, set_default_user_agent,
};
pub use debug_logger::StderrTransportLogger;
pub use injector::{
ApiKeyInjector, AuthInjector, BasicAuthInjector, BearerTokenInjector,
ClientCredentialsInjector, CookieInjector, NoopInjector, ProviderBearerInjector, TokenFunc,
};
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize, thiserror::Error)]
#[error("{message}")]
pub struct Error {
pub code: String,
pub message: String,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub system: String,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub request_id: String,
}
impl DetailedError for Error {
fn error_code(&self) -> Cow<'static, str> {
Cow::Owned(self.code.clone())
}
fn error_system(&self) -> Option<Cow<'static, str>> {
(!self.system.is_empty()).then(|| Cow::Owned(self.system.clone()))
}
fn error_request_id(&self) -> Option<Cow<'static, str>> {
(!self.request_id.is_empty()).then(|| Cow::Owned(self.request_id.clone()))
}
}