open-library-api-rs 0.1.0

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

/// Generic paginated search response wrapper.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SearchResponse<T> {
    #[serde(default)]
    pub num_found: u64,
    #[serde(default)]
    pub start: u64,
    #[serde(default)]
    pub num_found_exact: bool,
    #[serde(default)]
    pub docs: Vec<T>,
}

/// A book/work document returned by `/search.json`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct BookDoc {
    pub key: String,
    #[serde(default)]
    pub title: Option<String>,
    #[serde(default)]
    pub subtitle: Option<String>,
    #[serde(default)]
    pub author_name: Option<Vec<String>>,
    #[serde(default)]
    pub author_key: Option<Vec<String>>,
    #[serde(default)]
    pub cover_i: Option<i64>,
    #[serde(default)]
    pub cover_edition_key: Option<String>,
    #[serde(default)]
    pub first_publish_year: Option<i32>,
    #[serde(default)]
    pub isbn: Option<Vec<String>>,
    #[serde(default)]
    pub lccn: Option<Vec<String>>,
    #[serde(default)]
    pub oclc: Option<Vec<String>>,
    #[serde(default)]
    pub ia: Option<Vec<String>>,
    #[serde(default)]
    pub has_fulltext: bool,
    #[serde(default)]
    pub public_scan_b: bool,
    #[serde(default)]
    pub edition_count: u32,
    #[serde(default)]
    pub language: Option<Vec<String>>,
    #[serde(default)]
    pub publisher: Option<Vec<String>>,
    #[serde(default)]
    pub subject: Option<Vec<String>>,
    #[serde(default)]
    pub subject_facet: Option<Vec<String>>,
    #[serde(default)]
    pub place: Option<Vec<String>>,
    #[serde(default)]
    pub person: Option<Vec<String>>,
    #[serde(default)]
    pub time: Option<Vec<String>>,
}

/// An author document returned by `/search/authors.json`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct AuthorDoc {
    pub key: String,
    #[serde(default)]
    pub name: Option<String>,
    #[serde(default)]
    pub alternate_names: Option<Vec<String>>,
    #[serde(default)]
    pub birth_date: Option<String>,
    #[serde(default)]
    pub death_date: Option<String>,
    #[serde(default)]
    pub top_work: Option<String>,
    #[serde(default)]
    pub work_count: Option<u32>,
    #[serde(default)]
    pub top_subjects: Option<Vec<String>>,
}

/// A subject document returned by `/search/subjects.json`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct SubjectDoc {
    pub key: String,
    #[serde(default)]
    pub name: Option<String>,
    #[serde(default)]
    pub subject_type: Option<String>,
    #[serde(default)]
    pub work_count: Option<u64>,
}

/// A list document returned by `/search/lists.json`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ListDoc {
    pub key: String,
    #[serde(default)]
    pub name: Option<String>,
    #[serde(default)]
    pub edition_count: Option<u32>,
    #[serde(default)]
    pub seed_count: Option<u32>,
}

/// A document returned by `/search/inside.json`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct InsideDoc {
    #[serde(default)]
    pub ia: Option<String>,
    #[serde(default)]
    pub title: Option<String>,
    #[serde(default)]
    pub author: Option<String>,
    #[serde(default)]
    pub text: Option<String>,
}

/// Parameters for the main book search endpoint.
#[derive(Debug, Clone, Default)]
pub struct SearchParams {
    pub q: Option<String>,
    pub title: Option<String>,
    pub author: Option<String>,
    pub isbn: Option<String>,
    pub subject: Option<String>,
    pub place: Option<String>,
    pub person: Option<String>,
    pub language: Option<String>,
    pub publisher: Option<String>,
    pub page: Option<u32>,
    pub limit: Option<u32>,
    pub offset: Option<u32>,
    pub sort: Option<String>,
    pub fields: Option<String>,
    pub lang: Option<String>,
}

/// Parameters for the author search endpoint.
#[derive(Debug, Clone, Default)]
pub struct AuthorSearchParams {
    pub q: Option<String>,
    pub limit: Option<u32>,
    pub offset: Option<u32>,
}

/// Parameters for the subject search endpoint.
#[derive(Debug, Clone, Default)]
pub struct SubjectParams {
    pub details: Option<bool>,
    pub ebooks: Option<bool>,
    pub published_in: Option<String>,
    pub limit: Option<u32>,
    pub offset: Option<u32>,
}