open-library-api-rs 0.1.0

Async Rust client for the Open Library API
Documentation
// v0.0.1
use std::collections::HashMap;

use crate::client::OpenLibraryClient;
use crate::error::Result;
use crate::models::common::BooksJsCmd;
use crate::models::query::BooksApiEntry;
use crate::validation::validate_bibkeys;

impl OpenLibraryClient {
    /// Query the `/api/books` endpoint using bibliographic keys.
    ///
    /// `bibkeys` is a list of strings like `"ISBN:0451450523"`, `"OCLC:45883427"`,
    /// `"LCCN:2004046975"`, `"OLID:OL7408846M"`, or `"ID:5428012"`.
    ///
    /// `jscmd` controls how much data is returned (`Data`, `Details`, or `ViewApi`).
    pub async fn get_books(
        &self,
        bibkeys: &[String],
        jscmd: BooksJsCmd,
    ) -> Result<HashMap<String, BooksApiEntry>> {
        validate_bibkeys(bibkeys)?;
        let joined = bibkeys.join("|");
        let mut url = self.base_url.join("api/books")?;
        url.query_pairs_mut()
            .append_pair("bibkeys", &joined)
            .append_pair("jscmd", jscmd.as_str())
            .append_pair("format", "json");
        self.get_json(url).await
    }
}