use serde::{Deserialize, Serialize};
use tosho_macros::AutoGetter;
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct ImageUrl {
original_url: String,
#[serde(default)]
#[skip_field]
mobile_url: Option<String>,
#[serde(default)]
#[skip_field]
thumbnail_url: Option<String>,
#[serde(default)]
#[skip_field]
medium_url: Option<String>,
}
impl ImageUrl {
pub fn thumbnail_url(&self) -> Option<&str> {
if let Some(url) = &self.thumbnail_url {
Some(url)
} else if let Some(url) = &self.mobile_url {
Some(url)
} else if let Some(url) = &self.medium_url {
Some(url)
} else {
None
}
}
pub fn mobile_url(&self) -> Option<&str> {
if let Some(url) = &self.mobile_url {
Some(url)
} else if let Some(url) = &self.medium_url {
Some(url)
} else {
None
}
}
pub fn medium_url(&self) -> Option<&str> {
if let Some(url) = &self.medium_url {
Some(url)
} else if let Some(url) = &self.mobile_url {
Some(url)
} else {
None
}
}
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct ImageReaderUrl {
url: String,
thumbnail_url: String,
mobile_url: String,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct Creator {
id: u32,
#[serde(rename = "display_name")]
name: String,
slug: String,
uuid: String,
#[serde(default)]
roles: Option<Vec<String>>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct Genre {
id: u32,
uuid: String,
name: String,
#[serde(default, rename = "bisac_name")]
full_name: Option<String>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct PublisherIcon {
original_url: String,
mobile_url: String,
thumbnail_url: String,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct Publisher {
id: u32,
uuid: String,
name: String,
slug: String,
#[serde(default)]
image: Option<PublisherIcon>,
#[serde(default)]
issues_count: Option<u64>,
#[serde(default)]
collected_editions_count: Option<u64>,
#[serde(default)]
series_count: Option<u64>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct Imprint {
id: u32,
uuid: String,
name: String,
slug: String,
#[serde(default)]
imprint_type: Option<String>,
image: Option<ImageUrl>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct TokenData {
access_token: String,
refresh_token: String,
expires_in: u64,
token_type: String,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct RefreshedTokenData {
tokens: TokenData,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct RefreshedTokenResponse {
data: RefreshedTokenData,
}