initial
This commit is contained in:
77
src/main.rs
Normal file
77
src/main.rs
Normal 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(())
|
||||
}
|
||||
Reference in New Issue
Block a user