mangadex_api_schema_rust/v5/
chapter.rs1use serde::Deserialize;
2use url::Url;
3use uuid::Uuid;
4
5use crate::{TypedAttributes, deserialize_null_default};
6use mangadex_api_types::{Language, MangaDexDateTime, RelationshipType};
7
8#[derive(Clone, Debug, Deserialize, PartialEq, Default)]
11#[serde(rename_all = "camelCase")]
12#[non_exhaustive]
13#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
14#[cfg_attr(feature = "specta", derive(specta::Type))]
15pub struct ChapterAttributes {
16 #[serde(deserialize_with = "deserialize_null_default")]
18 pub title: Option<String>,
19 pub volume: Option<String>,
21 pub chapter: Option<String>,
23 pub pages: u32,
25 pub translated_language: Language,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub uploader: Option<Uuid>,
29 pub external_url: Option<Url>,
31 pub version: u32,
32 #[cfg_attr(
34 feature = "serialize",
35 serde(serialize_with = "crate::v5::mangadex_datetime_serialize")
36 )]
37 pub created_at: MangaDexDateTime,
38 #[cfg_attr(
40 feature = "serialize",
41 serde(serialize_with = "crate::v5::mangadex_datetime_serialize_option")
42 )]
43 pub updated_at: Option<MangaDexDateTime>,
44 #[cfg_attr(feature = "specta", specta(type = String))]
46 #[cfg_attr(
47 feature = "serialize",
48 serde(serialize_with = "crate::v5::mangadex_datetime_serialize_option")
49 )]
50 pub publish_at: Option<MangaDexDateTime>,
51 #[cfg_attr(feature = "specta", specta(type = String))]
53 #[cfg_attr(
54 feature = "serialize",
55 serde(serialize_with = "crate::v5::mangadex_datetime_serialize_option")
56 )]
57 pub readable_at: Option<MangaDexDateTime>,
58 #[serde(default)]
59 pub is_unavailable: bool,
60}
61
62impl TypedAttributes for ChapterAttributes {
63 const TYPE_: mangadex_api_types::RelationshipType = RelationshipType::Chapter;
64}