use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct ListResponse<T> {
pub count: Option<u64>,
pub next: Option<String>,
pub previous: Option<String>,
pub results: Vec<T>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Book {
pub name: Option<String>,
pub slug: Option<String>,
#[serde(flatten)]
pub extra: serde_json::Value,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BookGroup {
pub name: Option<String>,
pub slug: Option<String>,
#[serde(flatten)]
pub extra: serde_json::Value,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Translation {
pub name: Option<String>,
pub code: Option<String>,
#[serde(flatten)]
pub extra: serde_json::Value,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Verse {
pub text: Option<String>,
pub reference: Option<String>,
#[serde(flatten)]
pub extra: serde_json::Value,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Person {
pub name: Option<String>,
pub slug: Option<String>,
#[serde(flatten)]
pub extra: serde_json::Value,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Place {
pub name: Option<String>,
pub slug: Option<String>,
#[serde(flatten)]
pub extra: serde_json::Value,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Topic {
pub name: Option<String>,
pub slug: Option<String>,
#[serde(flatten)]
pub extra: serde_json::Value,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct CrossReference {
#[serde(flatten)]
pub data: serde_json::Value,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct GlossaryTerm {
pub term: Option<String>,
pub slug: Option<String>,
#[serde(flatten)]
pub extra: serde_json::Value,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct TimelineEra {
pub name: Option<String>,
pub slug: Option<String>,
#[serde(flatten)]
pub extra: serde_json::Value,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct TimelineEvent {
pub name: Option<String>,
pub slug: Option<String>,
#[serde(flatten)]
pub extra: serde_json::Value,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ReadingPlan {
pub name: Option<String>,
pub slug: Option<String>,
#[serde(flatten)]
pub extra: serde_json::Value,
}
#[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 },
}