open-library-api-rs 0.1.0

Async Rust client for the Open Library API
Documentation
// v0.0.1
use serde::{Deserialize, Serialize};

/// Response from `GET /subjects/{subject}.json`.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Subject {
    pub key: String,
    #[serde(default)]
    pub name: Option<String>,
    #[serde(default)]
    pub subject_type: Option<String>,
    #[serde(default)]
    pub work_count: Option<u64>,
    #[serde(default)]
    pub works: Vec<SubjectWork>,
    #[serde(default)]
    pub authors: Option<Vec<SubjectAuthor>>,
    #[serde(default)]
    pub publishers: Option<Vec<SubjectPublisher>>,
    #[serde(default)]
    pub related_subjects: Option<Vec<RelatedSubject>>,
    #[serde(default)]
    pub publishing_history: Option<Vec<(i32, u64)>>,
}

/// A work summary inside a subject response.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubjectWork {
    pub key: String,
    #[serde(default)]
    pub title: Option<String>,
    #[serde(default)]
    pub cover_id: Option<i64>,
    #[serde(default)]
    pub cover_edition_key: Option<String>,
    #[serde(default)]
    pub edition_count: Option<u32>,
    #[serde(default)]
    pub has_fulltext: bool,
    #[serde(default)]
    pub public_scan: bool,
    #[serde(default)]
    pub ia: Option<String>,
    #[serde(default)]
    pub authors: Option<Vec<SubjectWorkAuthor>>,
    #[serde(default)]
    pub first_publish_year: Option<i32>,
    #[serde(default)]
    pub subject: Option<Vec<String>>,
}

/// An author stub embedded inside a [`SubjectWork`].
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubjectWorkAuthor {
    pub key: String,
    #[serde(default)]
    pub name: Option<String>,
}

/// An author entry returned when `details=true` is requested on a subject.
/// `count` is the number of works by this author under the subject.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubjectAuthor {
    pub key: String,
    #[serde(default)]
    pub name: Option<String>,
    #[serde(default)]
    pub count: Option<u32>,
}

/// A publisher entry returned when `details=true` is requested on a subject.
/// `count` is the number of editions from this publisher under the subject.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubjectPublisher {
    #[serde(default)]
    pub name: Option<String>,
    #[serde(default)]
    pub count: Option<u32>,
}

/// A subject that is thematically related to the requested subject.
/// Returned when `details=true` is requested.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RelatedSubject {
    pub name: String,
    #[serde(default)]
    pub url: Option<String>,
}