use crate::error::Error;
use crate::http::HttpClient;
use crate::types::common::RequestOptions;
use crate::types::sources::{
DiscoverSchemaRequest, DiscoverSchemaResponse, IngestFromSourceRequest,
IngestFromSourceResponse, ListSourcesResponse, RegisterSourceRequest, RegisterSourceResponse,
SourceDetailResponse,
};
#[derive(Debug, Clone)]
pub struct SourcesClient {
http: HttpClient,
}
impl SourcesClient {
pub(crate) fn new(http: HttpClient) -> Self {
Self { http }
}
pub async fn register(
&self,
request: RegisterSourceRequest,
options: Option<&RequestOptions>,
) -> Result<RegisterSourceResponse, Error> {
self.http.post("/sources", &request, options).await
}
pub async fn list(
&self,
options: Option<&RequestOptions>,
) -> Result<ListSourcesResponse, Error> {
self.http.get("/sources", None, options).await
}
pub async fn get(
&self,
source_id: &str,
options: Option<&RequestOptions>,
) -> Result<SourceDetailResponse, Error> {
let path = format!("/sources/{}", encode(source_id));
self.http.get(&path, None, options).await
}
pub async fn delete(
&self,
source_id: &str,
options: Option<&RequestOptions>,
) -> Result<(), Error> {
let path = format!("/sources/{}", encode(source_id));
let _: serde_json::Value = self.http.delete(&path, None, options).await?;
Ok(())
}
pub async fn discover_schema(
&self,
source_id: &str,
request: DiscoverSchemaRequest,
options: Option<&RequestOptions>,
) -> Result<DiscoverSchemaResponse, Error> {
let path = format!("/sources/{}/discover", encode(source_id));
self.http.post(&path, &request, options).await
}
pub async fn ingest(
&self,
source_id: &str,
request: IngestFromSourceRequest,
options: Option<&RequestOptions>,
) -> Result<IngestFromSourceResponse, Error> {
let path = format!("/sources/{}/ingest", encode(source_id));
self.http.post(&path, &request, options).await
}
}
fn encode(s: &str) -> String {
url::form_urlencoded::byte_serialize(s.as_bytes()).collect()
}