wideholy 0.1.2

Rust SDK for WideHoly -- cross-religion scripture search, verse comparison, religious calendar, and commentary via the wideholy.com API.
Documentation
use serde::{Deserialize, Serialize};

/// Verse of the day response.
#[derive(Debug, Serialize, Deserialize)]
pub struct VerseOfTheDay {
    pub reference: Option<String>,
    pub text: Option<String>,
    #[serde(flatten)]
    pub extra: serde_json::Value,
}

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

/// Cross-religion verse comparison response.
#[derive(Debug, Serialize, Deserialize)]
pub struct CompareResult {
    #[serde(flatten)]
    pub data: serde_json::Value,
}

/// Search suggestion response.
#[derive(Debug, Serialize, Deserialize)]
pub struct SearchSuggestions {
    pub suggestions: Option<Vec<Suggestion>>,
    #[serde(flatten)]
    pub extra: serde_json::Value,
}

/// A single search suggestion.
#[derive(Debug, Serialize, Deserialize)]
pub struct Suggestion {
    pub text: Option<String>,
    #[serde(rename = "type")]
    pub suggestion_type: Option<String>,
    pub religion: Option<String>,
    #[serde(flatten)]
    pub extra: serde_json::Value,
}

/// Topic verses across religions.
#[derive(Debug, Serialize, Deserialize)]
pub struct TopicVerses {
    pub topic: Option<String>,
    #[serde(flatten)]
    pub extra: serde_json::Value,
}

/// Cross-religion topic comparison.
#[derive(Debug, Serialize, Deserialize)]
pub struct CrossReligion {
    pub topic: Option<String>,
    pub title: Option<String>,
    #[serde(flatten)]
    pub extra: serde_json::Value,
}

/// Religious calendar events.
#[derive(Debug, Serialize, Deserialize)]
pub struct CalendarEvents {
    pub year: Option<u32>,
    pub month: Option<u32>,
    #[serde(flatten)]
    pub extra: serde_json::Value,
}

/// Commentary for a verse.
#[derive(Debug, Serialize, Deserialize)]
pub struct CommentaryResult {
    pub verse_ref: Option<String>,
    pub religion: Option<String>,
    #[serde(flatten)]
    pub extra: serde_json::Value,
}

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