use crate::client::RetryOverride;
use crate::client::transport::retry::RetrySafety;
#[derive(Debug)]
pub enum BodyKind<'a> {
None,
Bytes(&'a bytes::Bytes),
Multipart(&'a super::multipart::MultipartBodyFactory),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ResponseMode {
Json,
File,
Audio,
}
impl ResponseMode {
pub const fn accept(self) -> &'static str {
match self {
Self::Json => "application/json",
Self::File => "application/octet-stream",
Self::Audio => "audio/wav, audio/x-wav, audio/pcm, application/octet-stream",
}
}
pub fn validate_content_type(self, raw: &str) -> crate::ZaiResult<()> {
match self {
Self::Json => super::decode::validate_json_content_type(raw),
Self::File => {
super::decode::validate_binary_content_type(raw, &["application/octet-stream"])
},
Self::Audio => super::decode::validate_binary_content_type(
raw,
&[
"audio/wav",
"audio/x-wav",
"audio/pcm",
"application/octet-stream",
],
),
}
}
}
pub struct PreparedRequest<'a> {
pub method: &'static str,
pub url: String,
pub body: BodyKind<'a>,
pub retry_safety: RetrySafety,
pub retry_override: Option<RetryOverride>,
pub response_mode: ResponseMode,
pub route_template: &'static str,
}
impl<'a> std::fmt::Debug for PreparedRequest<'a> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("PreparedRequest")
.field("method", &self.method)
.field("route", &self.route_template)
.field("retry_safety", &self.retry_safety)
.field("retry_override", &self.retry_override.is_some())
.finish_non_exhaustive()
}
}