Skip to main content

rs_plugin_common_interfaces/domain/
book.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4use crate::domain::rs_ids::RsIds;
5
6#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq)]
7#[serde(rename_all = "camelCase")]
8pub struct Book {
9    #[serde(default)]
10    pub id: String,
11    pub name: String,
12    #[serde(skip_serializing_if = "Option::is_none")]
13    #[serde(rename = "type")]
14    pub kind: Option<String>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub serie_ref: Option<String>,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub volume: Option<f64>,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub chapter: Option<f64>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub year: Option<u16>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub airdate: Option<i64>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub overview: Option<String>,
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub pages: Option<u32>,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub params: Option<Value>,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub lang: Option<String>,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub original: Option<String>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub isbn13: Option<String>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub openlibrary_edition_id: Option<String>,
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub openlibrary_work_id: Option<String>,
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub google_books_volume_id: Option<String>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub asin: Option<String>,
45    #[serde(default)]
46    pub modified: u64,
47    #[serde(default)]
48    pub added: u64,
49}
50
51impl From<Book> for RsIds {
52    fn from(value: Book) -> Self {
53        RsIds {
54            redseat: Some(value.id),
55            isbn13: value.isbn13,
56            openlibrary_edition_id: value.openlibrary_edition_id,
57            openlibrary_work_id: value.openlibrary_work_id,
58            google_books_volume_id: value.google_books_volume_id,
59            asin: value.asin,
60            volume: value.volume,
61            chapter: value.chapter,
62            ..Default::default()
63        }
64    }
65}