use crate::format::character::*;
use crate::format::producer::Producer;
use crate::format::release::*;
use crate::format::schema::{Language, Platform, StaffRole};
use crate::format::staff::*;
use crate::format::tag::*;
use serde::{Deserialize, Serialize};
use serde_repr::*;
#[derive(Deserialize, Serialize, Debug)]
pub struct VisualNovel {
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)]
pub struct VnTitle {
pub lang: Option<Language>,
pub title: Option<String>,
pub latin: Option<String>,
pub official: Option<bool>,
pub main: Option<bool>,
}
#[derive(Deserialize_repr, Serialize_repr, PartialEq, Debug)]
#[repr(u8)]
pub enum VnDevStatus {
Finished = 0,
InDevelopment = 1,
Cancelled = 2,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct VnImage {
pub id: Option<String>,
pub url: Option<String>,
pub dims: Option<Vec<u32>>,
pub sexual: Option<f32>,
pub violence: Option<f32>,
pub votecount: Option<u32>,
pub thumbnail: Option<String>,
pub thumbnail_dims: Option<Vec<u32>>,
}
#[derive(Deserialize_repr, Serialize_repr, PartialEq, Debug)]
#[repr(u8)]
pub enum VnLength {
VeryShort = 1,
Short = 2,
Average = 3,
Long = 4,
VeryLong = 5,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct VnScreenShot {
pub id: Option<String>,
pub url: Option<String>,
pub dims: Option<Vec<u32>>,
pub sexual: Option<f32>,
pub violence: Option<f32>,
pub votecount: Option<u32>,
pub thumbnail: Option<String>,
pub thumbnail_dims: Option<Vec<u32>>,
pub release: Option<Release>,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct VnRelation {
pub relation: Option<String>,
pub relation_official: Option<bool>,
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)]
pub struct VnTag {
pub rating: Option<f32>,
pub spoiler: Option<TagSpoilerLvl>,
pub lie: Option<bool>,
pub id: Option<String>,
pub name: Option<String>,
pub aliases: Option<Vec<String>>,
pub description: Option<String>,
pub category: Option<TagFlag>,
pub searchable: Option<bool>,
pub vn_count: Option<u32>,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct VnEdition {
pub eid: Option<u16>,
pub lang: Option<Language>,
pub name: Option<String>,
pub official: Option<bool>,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct VnStaff {
pub eid: Option<u32>,
pub role: Option<StaffRole>,
pub note: Option<String>,
pub id: Option<String>,
pub aid: Option<u32>,
pub ismain: Option<bool>,
pub name: Option<String>,
pub original: Option<String>,
pub lang: Option<Language>,
pub gender: Option<StaffGender>,
pub description: Option<String>,
pub extlinks: Option<Vec<ExtLink>>,
pub aliases: Option<Vec<StaffAlias>>,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct VnVoiceActor {
pub note: Option<String>,
pub staff: Option<Staff>,
pub character: Option<Character>,
}