Skip to main content

open_library_api_rs/models/
subject.rs

1// v0.0.1
2use serde::{Deserialize, Serialize};
3
4/// Response from `GET /subjects/{subject}.json`.
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct Subject {
7    pub key: String,
8    #[serde(default)]
9    pub name: Option<String>,
10    #[serde(default)]
11    pub subject_type: Option<String>,
12    #[serde(default)]
13    pub work_count: Option<u64>,
14    #[serde(default)]
15    pub works: Vec<SubjectWork>,
16    #[serde(default)]
17    pub authors: Option<Vec<SubjectAuthor>>,
18    #[serde(default)]
19    pub publishers: Option<Vec<SubjectPublisher>>,
20    #[serde(default)]
21    pub related_subjects: Option<Vec<RelatedSubject>>,
22    #[serde(default)]
23    pub publishing_history: Option<Vec<(i32, u64)>>,
24}
25
26/// A work summary inside a subject response.
27#[derive(Debug, Clone, Serialize, Deserialize)]
28pub struct SubjectWork {
29    pub key: String,
30    #[serde(default)]
31    pub title: Option<String>,
32    #[serde(default)]
33    pub cover_id: Option<i64>,
34    #[serde(default)]
35    pub cover_edition_key: Option<String>,
36    #[serde(default)]
37    pub edition_count: Option<u32>,
38    #[serde(default)]
39    pub has_fulltext: bool,
40    #[serde(default)]
41    pub public_scan: bool,
42    #[serde(default)]
43    pub ia: Option<String>,
44    #[serde(default)]
45    pub authors: Option<Vec<SubjectWorkAuthor>>,
46    #[serde(default)]
47    pub first_publish_year: Option<i32>,
48    #[serde(default)]
49    pub subject: Option<Vec<String>>,
50}
51
52/// An author stub embedded inside a [`SubjectWork`].
53#[derive(Debug, Clone, Serialize, Deserialize)]
54pub struct SubjectWorkAuthor {
55    pub key: String,
56    #[serde(default)]
57    pub name: Option<String>,
58}
59
60/// An author entry returned when `details=true` is requested on a subject.
61/// `count` is the number of works by this author under the subject.
62#[derive(Debug, Clone, Serialize, Deserialize)]
63pub struct SubjectAuthor {
64    pub key: String,
65    #[serde(default)]
66    pub name: Option<String>,
67    #[serde(default)]
68    pub count: Option<u32>,
69}
70
71/// A publisher entry returned when `details=true` is requested on a subject.
72/// `count` is the number of editions from this publisher under the subject.
73#[derive(Debug, Clone, Serialize, Deserialize)]
74pub struct SubjectPublisher {
75    #[serde(default)]
76    pub name: Option<String>,
77    #[serde(default)]
78    pub count: Option<u32>,
79}
80
81/// A subject that is thematically related to the requested subject.
82/// Returned when `details=true` is requested.
83#[derive(Debug, Clone, Serialize, Deserialize)]
84pub struct RelatedSubject {
85    pub name: String,
86    #[serde(default)]
87    pub url: Option<String>,
88}