use crate::format::producer::*;
use crate::format::schema::{Language, Medium, Platform};
use crate::format::vn::*;
use serde::{Deserialize, Serialize};
use serde_repr::*;
#[derive(Deserialize, Serialize, Debug)]
pub struct Release {
pub id: Option<String>,
pub title: Option<String>,
pub alttitle: Option<String>,
pub languages: Option<Vec<ReleaseLanguage>>,
pub platforms: Option<Vec<Platform>>,
pub medium: Option<Vec<ReleaseMedia>>,
pub vns: Option<Vec<ReleaseVnRelation>>,
pub producers: Option<Vec<ReleaseProducer>>,
pub released: Option<String>,
pub minage: Option<u8>,
pub patch: Option<bool>,
pub freeware: Option<bool>,
pub uncensored: Option<bool>,
pub official: Option<bool>,
pub has_ero: Option<bool>,
pub resolution: Option<Resolution>,
pub engine: Option<String>,
pub voiced: Option<VoicedType>,
pub notes: Option<String>,
pub gtin: Option<String>,
pub catalog: Option<String>,
pub extlinks: Option<Vec<ExtLink>>,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct ReleaseLanguage {
pub lang: Option<Language>,
pub title: Option<String>,
pub latin: Option<String>,
pub mtl: Option<bool>,
pub main: Option<bool>,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct ReleaseMedia {
pub medium: Option<Medium>,
pub qty: Option<u32>,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct ReleaseVnRelation {
pub rtype: Option<ReleaseType>,
pub id: Option<String>,
pub title: Option<String>,
pub alttitle: Option<String>,
pub titles: Option<Vec<VnTitle>>,
pub aliases: Option<Vec<String>>,
pub olang: Option<Language>,
pub devstatus: Option<VnDevStatus>,
pub released: Option<String>,
pub languages: Option<Vec<Language>>,
pub platforms: Option<Vec<Platform>>,
pub image: Option<VnImage>,
pub length: Option<VnLength>,
pub length_minutes: Option<u32>,
pub length_votes: Option<u32>,
pub description: Option<String>,
pub rating: Option<f32>,
pub votecount: Option<u32>,
pub screenshots: Option<Vec<VnScreenShot>>,
pub relations: Option<Vec<VnRelation>>,
pub tags: Option<Vec<VnTag>>,
pub developers: Option<Vec<Producer>>,
pub editions: Option<Vec<VnEdition>>,
pub staff: Option<Vec<VnStaff>>,
pub va: Option<Vec<VnVoiceActor>>,
pub extlinks: Option<Vec<ExtLink>>,
}
#[derive(Deserialize, Serialize, Debug)]
#[serde(rename_all = "lowercase")]
pub enum ReleaseType {
Trial,
Partial,
Complete,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct ReleaseProducer {
pub developer: Option<bool>,
pub publisher: Option<bool>,
pub id: Option<String>,
pub name: Option<String>,
pub aliases: Option<Vec<String>>,
pub lang: Option<Language>,
pub r#type: Option<ProducerType>,
pub description: Option<String>,
}
#[derive(Deserialize, Serialize, Debug)]
#[serde(untagged)]
pub enum Resolution {
NonStandard(String),
Dimensions(Vec<u32>),
}
#[derive(Deserialize_repr, Serialize_repr, PartialEq, Debug)]
#[repr(u8)]
pub enum VoicedType {
NotVoiced = 1,
EroScenesOnly = 2,
PartiallyVoiced = 3,
FullyVoiced = 4,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct ExtLink {
pub url: Option<String>,
pub label: Option<String>,
pub name: Option<String>,
pub id: Option<ExtLinkId>,
}
#[derive(Deserialize, Serialize, Debug)]
#[serde(untagged)]
pub enum ExtLinkId {
Str(String),
Int(u32),
}