use http::{uri::InvalidUri, Uri};
use url::Url;
#[cfg(feature = "async")]
use async_trait::async_trait;
use bytes::Bytes;
use crate::api::ApiError;
#[cfg(feature = "async")]
use crate::api::AsyncClient;
#[cfg(feature = "sync")]
use crate::api::Client;
use crate::types::BoxedAsyncRead;
use http::{HeaderMap, Response};
pub fn url_to_http_uri(url: Url) -> Result<Uri, InvalidUri> {
url.as_str().parse::<Uri>()
}
#[cfg(feature = "sync")]
pub trait Query<T, C>
where
C: Client,
{
fn query(&self, client: &C) -> Result<T, ApiError<C::Error>>;
}
#[cfg(feature = "async")]
#[async_trait]
pub trait QueryAsync<T, C>
where
C: AsyncClient,
{
async fn query_async(&self, client: &C) -> Result<T, ApiError<C::Error>>;
}
#[cfg(feature = "sync")]
pub trait RawQuery<C>
where
C: Client,
{
fn raw_query(&self, client: &C) -> Result<Response<Bytes>, ApiError<C::Error>>;
}
#[cfg(feature = "async")]
#[async_trait]
pub trait RawQueryAsync<C>
where
C: AsyncClient,
{
async fn raw_query_async(&self, client: &C) -> Result<Response<Bytes>, ApiError<C::Error>>;
async fn raw_query_async_ll(
&self,
client: &C,
inspect_error: Option<bool>,
) -> Result<Response<Bytes>, ApiError<C::Error>>;
async fn raw_query_read_body_async(
&self,
client: &C,
data: BoxedAsyncRead,
) -> Result<Response<Bytes>, ApiError<C::Error>>;
async fn download_async(
&self,
client: &C,
) -> Result<(HeaderMap, BoxedAsyncRead), ApiError<C::Error>>;
}