Skip to main content

open_library_api_rs/models/
partner.rs

1// v0.0.1
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5/// Response from the Volumes (Partner) API.
6#[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/// Bibliographic record for one book in a volumes response.
15#[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/// An item (borrowable/readable copy) in a volumes response.
63#[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/// How closely this item matches the requested identifier.
78#[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/// Borrowing/reading availability status.
88#[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}