use std::time::Duration;
use miette::Diagnostic;
use thiserror::Error;
#[derive(Debug, Clone, Error, Diagnostic)]
#[non_exhaustive]
pub enum AiError {
#[error("invalid AI client config: {0}")]
#[diagnostic(code(rtb::ai::config))]
InvalidConfig(String),
#[error("provider error: {0}")]
#[diagnostic(code(rtb::ai::provider))]
Provider(String),
#[error("HTTP transport: {0}")]
#[diagnostic(code(rtb::ai::transport))]
Transport(String),
#[error("response did not validate against schema: {0}")]
#[diagnostic(code(rtb::ai::schema))]
SchemaValidation(String),
#[error("response was not valid JSON for the requested type: {0}")]
#[diagnostic(code(rtb::ai::deserialize))]
Deserialize(String),
#[error("authentication failed: {0}")]
#[diagnostic(code(rtb::ai::auth))]
Auth(String),
#[error("rate limited by {host} (retry-after: {retry_after:?})")]
#[diagnostic(code(rtb::ai::rate_limited))]
RateLimited {
host: String,
retry_after: Option<Duration>,
},
}
pub(crate) fn redact(input: &str) -> String {
rtb_redact::string(input).into_owned()
}