use super::client::HttpClient;
use super::error::HttpError;
use super::response::Response;
use serde::de::DeserializeOwned;
use serde::Serialize;
use std::sync::OnceLock;
static DEFAULT_CLIENT: OnceLock<HttpClient> = OnceLock::new();
fn default_client() -> Result<&'static HttpClient, HttpError> {
if DEFAULT_CLIENT.get().is_none() {
let client = HttpClient::new()?;
let _ = DEFAULT_CLIENT.set(client);
}
DEFAULT_CLIENT.get().ok_or(HttpError::Other("客户端初始化失败".to_string()))
}
pub async fn get(url: &str) -> Result<Response, HttpError> {
default_client()?.get(url).await
}
pub async fn get_json<T: DeserializeOwned>(url: &str) -> Result<T, HttpError> {
default_client()?.get(url).await?.into_json()
}
pub async fn get_text(url: &str) -> Result<String, HttpError> {
default_client()?.get(url).await?.into_text()
}
pub async fn get_bytes(url: &str) -> Result<Vec<u8>, HttpError> {
Ok(default_client()?.get(url).await?.into_bytes())
}
pub async fn post_json<T: Serialize>(url: &str, body: &T) -> Result<Response, HttpError> {
default_client()?.post_json(url, body).await
}
pub async fn post_json_for_json<T: Serialize, R: DeserializeOwned>(
url: &str,
body: &T,
) -> Result<R, HttpError> {
default_client()?.post_json(url, body).await?.into_json()
}
pub async fn post_form<T: Serialize>(url: &str, body: &T) -> Result<Response, HttpError> {
default_client()?.post_form(url, body).await
}
pub async fn put_json<T: Serialize>(url: &str, body: &T) -> Result<Response, HttpError> {
default_client()?.put_json(url, body).await
}
pub async fn delete(url: &str) -> Result<Response, HttpError> {
default_client()?.delete(url).await
}
pub async fn patch_json<T: Serialize>(url: &str, body: &T) -> Result<Response, HttpError> {
default_client()?.patch_json(url, body).await
}
pub async fn head(url: &str) -> Result<Response, HttpError> {
default_client()?.head(url).await
}
#[cfg(test)]
mod tests {
}