use crate::{send_and_translate_response, Deepgram};
use options::{Options, SerializableOptions};
use response::{Message, Project};
pub mod options;
pub mod response;
#[derive(Debug, Clone)]
pub struct Projects<'a>(&'a Deepgram);
impl Deepgram {
pub fn projects(&self) -> Projects<'_> {
self.into()
}
}
impl<'a> From<&'a Deepgram> for Projects<'a> {
fn from(deepgram: &'a Deepgram) -> Self {
Self(deepgram)
}
}
impl Projects<'_> {
pub async fn list(&self) -> crate::Result<response::Projects> {
let request = self.0.client.get("https://api.deepgram.com/v1/projects");
send_and_translate_response(request).await
}
pub async fn get(&self, project_id: &str) -> crate::Result<Project> {
let url = format!("https://api.deepgram.com/v1/projects/{project_id}");
send_and_translate_response(self.0.client.get(url)).await
}
pub async fn update(&self, project_id: &str, options: &Options) -> crate::Result<Message> {
let url = format!("https://api.deepgram.com/v1/projects/{project_id}");
let request = self
.0
.client
.patch(url)
.json(&SerializableOptions::from(options));
send_and_translate_response(request).await
}
pub async fn delete(&self, project_id: &str) -> crate::Result<Message> {
let url = format!("https://api.deepgram.com/v1/projects/{project_id}");
let request = self.0.client.delete(url);
send_and_translate_response(request).await
}
}