open_library_api_rs/models/
partner.rs1use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct VolumesResponse {
8 #[serde(default)]
9 pub records: HashMap<String, VolumeRecord>,
10 #[serde(default)]
11 pub items: Vec<VolumeItem>,
12}
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
16pub struct VolumeRecord {
17 #[serde(default)]
18 pub url: Option<String>,
19 #[serde(default)]
20 pub key: Option<String>,
21 #[serde(default)]
22 pub title: Option<String>,
23 #[serde(default)]
24 pub authors: Option<Vec<VolumeAuthor>>,
25 #[serde(default)]
26 pub cover: Option<VolumeCover>,
27 #[serde(default)]
28 pub identifiers: Option<serde_json::Value>,
29 #[serde(default)]
30 pub classifications: Option<serde_json::Value>,
31 #[serde(default)]
32 pub publishers: Option<Vec<NamedEntity>>,
33 #[serde(default)]
34 pub publish_date: Option<String>,
35 #[serde(default)]
36 pub subjects: Option<Vec<NamedEntity>>,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct VolumeAuthor {
41 #[serde(default)]
42 pub url: Option<String>,
43 #[serde(default)]
44 pub name: Option<String>,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct VolumeCover {
49 #[serde(default)]
50 pub small: Option<String>,
51 #[serde(default)]
52 pub medium: Option<String>,
53 #[serde(default)]
54 pub large: Option<String>,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
58pub struct NamedEntity {
59 pub name: String,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize)]
64pub struct VolumeItem {
65 #[serde(default)]
66 pub match_type: Option<VolumeMatch>,
67 #[serde(default)]
68 pub status: Option<VolumeStatus>,
69 #[serde(default)]
70 pub from_record: Option<String>,
71 #[serde(default)]
72 pub url: Option<String>,
73 #[serde(default)]
74 pub cover: Option<VolumeCover>,
75}
76
77#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
79#[serde(rename_all = "lowercase")]
80pub enum VolumeMatch {
81 Exact,
82 Similar,
83 #[serde(other)]
84 Other,
85}
86
87#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
89#[serde(rename_all = "lowercase")]
90pub enum VolumeStatus {
91 Borrowable,
92 Readable,
93 Limited,
94 Unavailable,
95 #[serde(other)]
96 Other,
97}