use std::sync::Arc;
use crate::error::Result;
use crate::http::Config;
use crate::types::{
list_query, CreateTemplateOptions, DeleteTemplateResponse, List, ListOptions, Template,
TemplateId, TemplateListItem, UpdateTemplateOptions,
};
#[derive(Clone)]
pub struct Templates(pub(crate) Arc<Config>);
impl Templates {
pub async fn create(&self, template: &CreateTemplateOptions) -> Result<TemplateId> {
self.0.post(&["templates"], template).await
}
pub async fn get(&self, id_or_alias: &str) -> Result<Template> {
self.0.get(&["templates", id_or_alias], &[]).await
}
pub async fn list(&self, options: Option<&ListOptions>) -> Result<List<TemplateListItem>> {
self.0.get(&["templates"], &list_query(options)).await
}
pub async fn update(
&self,
id_or_alias: &str,
changes: &UpdateTemplateOptions,
) -> Result<TemplateId> {
self.0.patch(&["templates", id_or_alias], changes).await
}
pub async fn delete(&self, id_or_alias: &str) -> Result<DeleteTemplateResponse> {
self.0.delete(&["templates", id_or_alias]).await
}
pub async fn publish(&self, id_or_alias: &str) -> Result<TemplateId> {
self.0
.post_empty(&["templates", id_or_alias, "publish"])
.await
}
pub async fn duplicate(&self, id_or_alias: &str) -> Result<TemplateId> {
self.0
.post_empty(&["templates", id_or_alias, "duplicate"])
.await
}
}