use bytes::Bytes;
use crate::client::Call;
use crate::error::Result;
use crate::model::assets::{DisplayElements, PlayAudio};
use crate::transport::HttpTransport;
use crate::types::app_name::AppName;
use crate::types::asset_name::AssetName;
use crate::types::try_into_value::TryIntoValue;
crate::api::endpoint!(
Assets
);
impl<T: HttpTransport> Assets<'_, T> {
pub async fn upload(
&self,
application_name: impl TryIntoValue<AppName>,
file: impl TryIntoValue<AssetName>,
data: impl Into<Bytes>,
) -> Result<()> {
let request = Call::post("assets/upload")
.query("application_name", application_name.try_into_value()?)
.query("file", file.try_into_value()?)
.octet_stream(data);
self.client.ok(request).await
}
pub async fn delete(&self, application_name: impl TryIntoValue<AppName>) -> Result<()> {
let request = Call::delete("assets/upload")
.query("application_name", application_name.try_into_value()?);
self.client.ok(request).await
}
pub async fn play(&self, audio: &PlayAudio) -> Result<()> {
let request = Call::post("audio/play").json(audio)?;
self.client.ok(request).await
}
pub async fn stop(&self) -> Result<()> {
self.client.ok(Call::delete("audio/play")).await
}
pub async fn draw(&self, elements: &DisplayElements) -> Result<()> {
let request = Call::post("display/draw").json(elements)?;
self.client.ok(request).await
}
pub async fn clear(&self, application_name: Option<AppName>) -> Result<()> {
let request =
Call::delete("display/draw").maybe_query("application_name", application_name);
self.client.ok(request).await
}
}