Skip to main content

open_library_api_rs/models/
author.rs

1// v0.0.1
2use serde::{Deserialize, Serialize};
3
4use super::common::{Key, Link, TextOrValue};
5use super::work::DateValue;
6
7/// An author entity.
8#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct Author {
10    pub key: String,
11    #[serde(default)]
12    pub name: Option<String>,
13    #[serde(default)]
14    pub personal_name: Option<String>,
15    #[serde(default)]
16    pub alternate_names: Option<Vec<String>>,
17    #[serde(default)]
18    pub birth_date: Option<String>,
19    #[serde(default)]
20    pub death_date: Option<String>,
21    #[serde(default)]
22    pub bio: Option<TextOrValue>,
23    #[serde(default)]
24    pub location: Option<String>,
25    #[serde(default)]
26    pub photos: Option<Vec<i64>>,
27    #[serde(default)]
28    pub links: Option<Vec<Link>>,
29    #[serde(default)]
30    pub wikipedia: Option<String>,
31    #[serde(default)]
32    pub created: Option<DateValue>,
33    #[serde(default)]
34    pub last_modified: Option<DateValue>,
35    #[serde(default)]
36    pub latest_revision: Option<i64>,
37    #[serde(default)]
38    pub revision: Option<i64>,
39}
40
41/// A summary of an author as returned inside a search result.
42#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct AuthorSummary {
44    pub key: String,
45    #[serde(default)]
46    pub name: Option<String>,
47}
48
49/// Response from `GET /authors/{id}/works.json`.
50#[derive(Debug, Clone, Serialize, Deserialize)]
51pub struct AuthorWorks {
52    #[serde(default)]
53    pub entries: Vec<AuthorWorkEntry>,
54    #[serde(default)]
55    pub links: Option<super::common::PaginationLinks>,
56}
57
58/// One work returned inside the author-works list.
59#[derive(Debug, Clone, Serialize, Deserialize)]
60pub struct AuthorWorkEntry {
61    pub key: String,
62    #[serde(default)]
63    pub title: Option<String>,
64    #[serde(default)]
65    pub covers: Option<Vec<i64>>,
66    #[serde(default)]
67    pub authors: Option<Vec<Key>>,
68    #[serde(default)]
69    pub first_publish_date: Option<String>,
70    #[serde(default)]
71    pub subjects: Option<Vec<String>>,
72}