use crate::{
client::WitClient,
common_types::{DeleteResponse, TraitBasic},
errors::Error,
};
use reqwest::Method;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Serialize)]
pub struct NewTrait {
name: String,
values: Vec<String>,
}
impl NewTrait {
pub fn new(name: String, values: Vec<String>) -> Self {
Self { name, values }
}
}
#[derive(Debug, Deserialize, PartialEq)]
pub struct TraitResponse {
pub id: String,
pub name: String,
pub values: Vec<TraitValue>,
}
#[derive(Debug, Deserialize, PartialEq)]
pub struct TraitValue {
pub id: String,
pub value: String,
}
impl WitClient {
pub async fn get_traits(&self) -> Result<Vec<TraitBasic>, Error> {
let data = self
.make_request(Method::GET, "/traits", vec![], Option::<Value>::None)
.await?;
Ok(data)
}
pub async fn create_trait(&self, new_trait: NewTrait) -> Result<TraitResponse, Error> {
let data = self
.make_request(Method::POST, "/traits", vec![], Some(new_trait))
.await?;
Ok(data)
}
pub async fn get_trait(&self, trait_name: &str) -> Result<TraitResponse, Error> {
let endpoint = format!("/traits/{trait_name}");
let data = self
.make_request(Method::GET, &endpoint, vec![], Option::<Value>::None)
.await?;
Ok(data)
}
pub async fn delete_trait(&self, trait_name: &str) -> Result<DeleteResponse, Error> {
let endpoint = format!("/traits/{trait_name}");
let data = self
.make_request(Method::DELETE, &endpoint, vec![], Option::<Value>::None)
.await?;
Ok(data)
}
}