This commit is contained in:
ZockerKatze
2025-04-30 09:32:21 +02:00
commit 60979f2d9c
9 changed files with 1897 additions and 0 deletions

77
src/main.rs Normal file
View File

@@ -0,0 +1,77 @@
use clap::Command;
use colored::*;
use serde::{Deserialize, Serialize};
use std::error::Error;
#[derive(Debug, Serialize, Deserialize)]
struct BibleVerse {
translation: Translation,
random_verse: RandomVerse,
}
#[derive(Debug, Serialize, Deserialize)]
struct Translation {
identifier: String,
name: String,
language: String,
language_code: String,
license: String,
}
#[derive(Debug, Serialize, Deserialize)]
struct RandomVerse {
book_id: String,
book: String,
chapter: i32,
verse: i32,
text: String,
}
async fn fetch_random_verse() -> Result<BibleVerse, Box<dyn Error>> {
let url = "https://bible-api.com/data/web/random";
let verse = reqwest::get(url).await?.json::<BibleVerse>().await?;
Ok(verse)
}
fn display_verse(verse: &BibleVerse) {
println!("{}", "".color("cyan").repeat(60));
// Create a reference string like "Book chapter:verse"
let reference = format!("{} {}:{}",
verse.random_verse.book,
verse.random_verse.chapter,
verse.random_verse.verse);
println!("{}", reference.bold().color("yellow"));
println!();
println!("{}", verse.random_verse.text.trim());
println!();
println!("{} ({}) [{}]",
verse.translation.name.italic().color("green"),
verse.translation.identifier.italic(),
verse.translation.language);
println!("{}", "".color("cyan").repeat(60));
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let _matches = Command::new("Bible Verse")
.version("1.0")
.author("BibleVerse")
.about("Fetches random Bible verses")
.get_matches();
println!("Fetching a random Bible verse...");
match fetch_random_verse().await {
Ok(verse) => {
display_verse(&verse);
}
Err(e) => {
eprintln!("{} {}", "Error:".bold().color("red"), e);
eprintln!("Try checking your internet connection or the API endpoint.");
}
}
Ok(())
}