use serde::{Deserialize, Serialize};
use tosho_macros::AutoGetter;
use crate::models::TokenData;
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct PublishersList {
#[serde(rename = "pages_count")]
pages: u32,
#[serde(rename = "total_count")]
count: u64,
#[serde(rename = "publishers")]
data: Vec<super::common::Publisher>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct ImprintsList {
#[serde(rename = "pages_count")]
pages: u32,
#[serde(rename = "total_count")]
count: u64,
#[serde(rename = "publisher_imprints")]
data: Vec<super::common::Imprint>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct GenresList {
#[serde(rename = "pages_count")]
pages: u32,
#[serde(rename = "total_count")]
count: u64,
#[serde(rename = "genres")]
data: Vec<super::common::Genre>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct CreatorsList {
#[serde(rename = "pages_count")]
pages: u32,
#[serde(rename = "total_count")]
count: u64,
#[serde(rename = "creators")]
data: Vec<super::common::Creator>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct MarketplaceBook {
id: u32,
uuid: String,
title: String,
full_title: String,
slug: String,
publisher: super::common::Publisher,
#[serde(rename = "publisher_imprint")]
imprint: Option<super::common::Imprint>,
cover: super::common::ImageUrl,
#[serde(with = "super::datetime")]
release_date: chrono::DateTime<chrono::FixedOffset>,
#[serde(rename = "edition_price_min")]
minimum_price: u64,
#[serde(rename = "edition_price_max")]
maximum_price: u64,
total_editions: u32,
#[serde(rename = "editions_count_in_marketplace")]
marketplace_count: u32,
#[serde(rename = "editions_count_in_marketplace_with_rmq")]
marketplace_remarque_count: u32,
#[serde(rename = "marketplace_added_date", with = "super::datetime")]
created_at: chrono::DateTime<chrono::FixedOffset>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct MarketplaceBooksList {
#[serde(rename = "pages_count")]
pages: u32,
#[serde(rename = "total_count")]
count: u64,
#[serde(rename = "books")]
data: Vec<MarketplaceBook>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct MarketplaceSeller {
uuid: String,
username: String,
email: String,
first_name: Option<String>,
last_name: Option<String>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct MarketplaceEdition {
id: String,
#[serde(rename = "book_id")]
issue_uuid: String,
#[serde(rename = "book_index")]
index: u32,
#[serde(rename = "marketplace_price")]
price_usd: u64,
#[serde(rename = "marketplace_created_at", with = "super::datetime")]
created_at: chrono::DateTime<chrono::FixedOffset>,
#[serde(rename = "owner")]
seller: MarketplaceSeller,
#[serde(rename = "seller_notes")]
notes: Option<String>,
#[serde(rename = "sig")]
signature: bool,
#[serde(rename = "remarqued_watermark_cover_url")]
remarque_cover: Option<String>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct MarketplaceIssue {
id: u32,
uuid: String,
title: String,
full_title: String,
slug: String,
publisher: super::common::Publisher,
cover: super::common::ImageUrl,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct MarketplaceDetailedEdition {
id: String,
#[serde(rename = "book")]
issue: MarketplaceIssue,
#[serde(rename = "book_index")]
index: u32,
#[serde(rename = "marketplace_price")]
price_usd: u64,
#[serde(rename = "marketplace_created_at", with = "super::datetime")]
created_at: chrono::DateTime<chrono::FixedOffset>,
#[serde(rename = "owner")]
seller: MarketplaceSeller,
#[serde(rename = "seller_notes")]
notes: Option<String>,
#[serde(rename = "sig")]
signature: bool,
#[serde(rename = "remarqued_watermark_cover_url")]
remarque_cover: Option<String>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct MarketplaceEditionsList {
#[serde(rename = "pages_count")]
pages: u32,
#[serde(rename = "total_count")]
count: u64,
#[serde(rename = "editions")]
data: Vec<MarketplaceEdition>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct MarketplaceDetailedEditionsList {
#[serde(rename = "pages_count")]
pages: u32,
#[serde(rename = "total_count")]
count: u64,
#[serde(rename = "editions")]
data: Vec<MarketplaceDetailedEdition>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct CollectedEdition {
id: String,
#[serde(rename = "book_index")]
index: u32,
in_marketplace: bool,
#[serde(rename = "sig")]
has_signature: bool,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct CollectedEditionList {
#[serde(rename = "pages_count")]
pages: u32,
#[serde(rename = "total_count")]
count: u64,
#[serde(rename = "editions")]
data: Vec<CollectedEdition>,
issue: super::issues::IssueDetail,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct PublisherDetailResponse {
#[serde(rename = "publisher")]
#[deref_clone]
data: super::common::Publisher,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct CustomerPaymentMethod {
id: String,
pm_id: String,
pm_type: String,
brand: String,
last4: String,
exp_month: String,
exp_year: String,
country: Option<String>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct CustomerDetail {
#[serde(rename = "uuid")]
id: String,
email: String,
username: Option<String>,
first_name: Option<String>,
last_name: Option<String>,
place_number: u64,
referral_code: String,
#[serde(rename = "referrals_count")]
referral_uses: u64,
payment_method: Option<CustomerPaymentMethod>,
balance: u64,
roles: String,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct CustomerDetailResponse {
#[serde(rename = "customer")]
#[deref_clone]
data: CustomerDetail,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct CollectedEditionDetailed {
id: String,
#[serde(rename = "book_index")]
index: u32,
book_id: String,
full_title: String,
in_marketplace: bool,
original_url: String,
mobile_url: String,
thumbnail_url: String,
#[serde(rename = "variant_identifier")]
variant_id: Option<String>,
variant_description: String,
signable: bool,
resellable: bool,
downloadable: bool,
age_rating: String,
language: String,
#[serde(with = "super::datetime")]
release_date: chrono::DateTime<chrono::FixedOffset>,
total_pages: u32,
#[serde(default, rename = "categories")]
genres: Vec<super::common::Genre>,
#[serde(default)]
creators: Vec<super::issues::IssueCreator>,
#[serde(rename = "sig")]
has_signature: bool,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct ReadingHistorySeries {
id: String,
title: String,
description: Option<String>,
slug: String,
#[serde(with = "super::datetime")]
created_at: chrono::DateTime<chrono::FixedOffset>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct ReadingHistory {
id: String,
uuid: String,
title: String,
full_title: String,
slug: String,
description: Option<String>,
original_url: String,
mobile_url: String,
thumbnail_url: String,
series_run: ReadingHistorySeries,
#[serde(rename = "owned_editions")]
editions: Vec<CollectedEditionDetailed>,
total_pages: u32,
#[serde(default)]
bookmark_page: Option<u32>,
#[serde(
default,
rename = "bookmark_timestamp",
serialize_with = "super::datetime::serialize_opt",
deserialize_with = "super::datetime::deserialize_opt"
)]
last_read: Option<chrono::DateTime<chrono::FixedOffset>>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct ReadingHistoryList {
#[serde(rename = "pages_count")]
pages: u32,
#[serde(rename = "books")]
data: Vec<ReadingHistory>,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct LoginData {
user: CustomerDetail,
tokens: TokenData,
}
#[derive(Debug, Clone, AutoGetter, Serialize, Deserialize)]
pub struct LoginResponse {
#[serde(rename = "data")]
#[deref_clone]
data: LoginData,
}