use serde::{Deserialize, Serialize};
type AnilistID = u32;
type MalID = u32;
#[derive(Serialize)]
pub struct SearchRequest {
pub image: String,
pub filter: Option<AnilistID>,
}
impl SearchRequest {
pub fn new(image: Vec<u8>) -> Self {
Self {
image: base64::encode(&image),
filter: None,
}
}
}
#[derive(Debug, Deserialize)]
pub struct SearchResponse {
#[serde(rename = "RawDocsCount")]
pub raw_docs_count: u32,
#[serde(rename = "RawDocsSearchTime")]
pub raw_docs_search_time: u64,
#[serde(rename = "ReRankSearchTime")]
pub re_rank_search_time: u64,
#[serde(rename = "CacheHit")]
pub cache_hit: bool,
pub trial: u32,
#[serde(flatten)]
pub limit: Limit,
#[serde(flatten)]
pub quota: Quota,
pub docs: Vec<Doc>,
}
#[derive(Debug, Deserialize)]
pub struct Doc {
pub from: f64,
pub to: f64,
pub at: f64,
pub similarity: f64,
pub anilist_id: AnilistID,
pub mal_id: Option<MalID>,
pub is_adult: bool,
pub title_native: Option<String>,
pub title_chinese: Option<String>,
pub title_english: Option<String>,
pub title_romaji: String,
pub synonyms: Vec<String>,
pub synonyms_chinese: Vec<String>,
pub filename: String,
pub tokenthumb: String,
}
#[derive(Debug, Deserialize)]
pub enum Episode {
Number(u32),
OVA,
Special,
Other,
}
#[derive(Debug, Deserialize)]
pub struct Me {
pub user_id: Option<u32>,
pub email: String,
#[serde(flatten)]
pub limit: Limit,
#[serde(flatten)]
pub quota: Quota,
#[serde(flatten)]
pub user_limit: UserLimit,
#[serde(flatten)]
pub user_quota: UserQuota,
}
#[derive(Debug, Deserialize)]
pub struct Limit {
pub limit: u32,
pub limit_ttl: u32,
}
#[derive(Debug, Deserialize)]
pub struct Quota {
pub quota: u32,
pub quota_ttl: u32,
}
#[derive(Debug, Deserialize)]
pub struct UserLimit {
pub user_limit: u32,
pub user_limit_ttl: u32,
}
#[derive(Debug, Deserialize)]
pub struct UserQuota {
pub user_quota: u32,
pub user_quota_ttl: u32,
}