use crate::{ApiResult, Error, FakeYou};
use reqwest::StatusCode;
use serde::{Deserialize, Serialize};
use super::TTS_CATEGORIES;
#[derive(Debug, Serialize, Deserialize)]
pub struct TtsCategoriesResult {
pub success: bool,
pub categories: Vec<TtsCategory>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct TtsCategory {
pub category_token: String,
pub model_type: String,
pub maybe_super_category_token: Option<String>,
pub can_directly_have_models: bool,
pub can_have_subcategories: bool,
pub can_only_mods_apply: bool,
pub name: String,
pub name_for_dropdown: String,
pub is_mod_approved: Option<bool>,
pub created_at: String,
pub updated_at: String,
pub deleted_at: Option<String>,
}
pub trait CategoriesApi {
fn tts_categories(&self) -> ApiResult<TtsCategoriesResult>;
}
impl CategoriesApi for FakeYou {
fn tts_categories(&self) -> ApiResult<TtsCategoriesResult> {
let url = format!("{}/{}", &self.api_url, TTS_CATEGORIES);
let response = self
.client
.get(url.as_str())
.header("Accept", "application/json")
.send()
.map_err(|e| Error::RequestFailed(e.to_string()))?;
match response.status() {
StatusCode::OK => response
.json::<TtsCategoriesResult>()
.map_err(|e| Error::ParseError(e.to_string())),
code => Err(Error::Unknown(code.as_u16())),
}
}
}