widebible 0.1.3

Rust SDK for WideBible -- Bible verses, books, people, places, cross-references, and study tools via the widebible.com API.
Documentation
use serde::{Deserialize, Serialize};

/// Paginated list response from the API.
#[derive(Debug, Serialize, Deserialize)]
pub struct ListResponse<T> {
    pub count: Option<u64>,
    pub next: Option<String>,
    pub previous: Option<String>,
    pub results: Vec<T>,
}

/// A book of the Bible.
#[derive(Debug, Serialize, Deserialize)]
pub struct Book {
    pub name: Option<String>,
    pub slug: Option<String>,
    #[serde(flatten)]
    pub extra: serde_json::Value,
}

/// A book group (e.g. Pentateuch, Gospels).
#[derive(Debug, Serialize, Deserialize)]
pub struct BookGroup {
    pub name: Option<String>,
    pub slug: Option<String>,
    #[serde(flatten)]
    pub extra: serde_json::Value,
}

/// A Bible translation.
#[derive(Debug, Serialize, Deserialize)]
pub struct Translation {
    pub name: Option<String>,
    pub code: Option<String>,
    #[serde(flatten)]
    pub extra: serde_json::Value,
}

/// A Bible verse.
#[derive(Debug, Serialize, Deserialize)]
pub struct Verse {
    pub text: Option<String>,
    pub reference: Option<String>,
    #[serde(flatten)]
    pub extra: serde_json::Value,
}

/// A biblical person.
#[derive(Debug, Serialize, Deserialize)]
pub struct Person {
    pub name: Option<String>,
    pub slug: Option<String>,
    #[serde(flatten)]
    pub extra: serde_json::Value,
}

/// A biblical place.
#[derive(Debug, Serialize, Deserialize)]
pub struct Place {
    pub name: Option<String>,
    pub slug: Option<String>,
    #[serde(flatten)]
    pub extra: serde_json::Value,
}

/// A thematic topic.
#[derive(Debug, Serialize, Deserialize)]
pub struct Topic {
    pub name: Option<String>,
    pub slug: Option<String>,
    #[serde(flatten)]
    pub extra: serde_json::Value,
}

/// A cross-reference between passages.
#[derive(Debug, Serialize, Deserialize)]
pub struct CrossReference {
    #[serde(flatten)]
    pub data: serde_json::Value,
}

/// A glossary term.
#[derive(Debug, Serialize, Deserialize)]
pub struct GlossaryTerm {
    pub term: Option<String>,
    pub slug: Option<String>,
    #[serde(flatten)]
    pub extra: serde_json::Value,
}

/// A timeline era.
#[derive(Debug, Serialize, Deserialize)]
pub struct TimelineEra {
    pub name: Option<String>,
    pub slug: Option<String>,
    #[serde(flatten)]
    pub extra: serde_json::Value,
}

/// A timeline event.
#[derive(Debug, Serialize, Deserialize)]
pub struct TimelineEvent {
    pub name: Option<String>,
    pub slug: Option<String>,
    #[serde(flatten)]
    pub extra: serde_json::Value,
}

/// A reading plan.
#[derive(Debug, Serialize, Deserialize)]
pub struct ReadingPlan {
    pub name: Option<String>,
    pub slug: Option<String>,
    #[serde(flatten)]
    pub extra: serde_json::Value,
}

/// Error type for WideBible API operations.
#[derive(Debug, thiserror::Error)]
pub enum WideBibleError {
    #[error("HTTP request failed: {0}")]
    Http(#[from] reqwest::Error),
    #[error("API error (HTTP {status}): {body}")]
    Api { status: u16, body: String },
}