mod handle;
mod model;
use serde::Serialize;
pub use self::handle::TaskHandle;
pub use self::model::{TaskInfo, TaskStatus};
use crate::client::Endpoint;
use crate::error::Result;
impl Endpoint {
#[cfg_attr(feature = "tracing", tracing::instrument(skip(self, payload), fields(route = %self.route(), request_id = self.request_id()), err))]
pub async fn submit<T>(&self, payload: &T) -> Result<TaskHandle>
where
T: Serialize + ?Sized + Sync,
{
let req = self.request(&join(self.route(), "submit"))?.json(payload);
let info: TaskInfo = self.client().send(req).await?.json().await?;
Ok(TaskHandle::new(
self.client().clone(),
self.route_cow(),
info.task_id,
self.headers().clone(),
))
}
}
pub(super) fn join(route: &str, op: &str) -> String {
format!("{}/{op}", route.trim_end_matches('/'))
}