use crate::v1::api::Client;
use crate::v1::error::APIError;
use crate::v1::helpers::format_response;
use crate::v1::resources::response::request::ResponseParameters;
use crate::v1::resources::response::response::ResponseObject;
#[cfg(feature = "stream")]
use crate::v1::resources::response::shared::ResponseStream;
use crate::v1::resources::shared::DeletedObject;
pub struct Responses<'a> {
pub client: &'a Client,
}
impl Client {
pub fn responses(&self) -> Responses<'_> {
Responses { client: self }
}
}
impl Responses<'_> {
pub async fn create(&self, parameters: ResponseParameters) -> Result<ResponseObject, APIError> {
let response = self.client.post("/responses", ¶meters, None).await?;
let response: ResponseObject = format_response(response.data)?;
Ok(response)
}
pub async fn retrieve(&self, response_id: &str) -> Result<ResponseObject, APIError> {
let response = self
.client
.get(&format!("/responses/{response_id}"))
.await?;
let response: ResponseObject = format_response(response)?;
Ok(response)
}
pub async fn delete(&self, response_id: &str) -> Result<DeletedObject, APIError> {
let response = self
.client
.delete(&format!("/responses/{response_id}"))
.await?;
let response: DeletedObject = format_response(response)?;
Ok(response)
}
#[cfg(feature = "stream")]
pub async fn create_stream(
&self,
parameters: ResponseParameters,
) -> Result<ResponseStream, APIError> {
let mut stream_parameters = ResponseParameters { ..parameters };
stream_parameters.stream = Some(true);
Ok(self
.client
.post_stream("/responses", &stream_parameters, None)
.await)
}
}