code cleanup
This commit is contained in:
		@@ -102,19 +102,9 @@ pub fn search_for_word(word: &str, from_files: &Bible) -> Vec<String> {
 | 
			
		||||
    found
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn get(book: &str, chap_and_ver: &str, bibles: Vec<&Bible>) -> Result<String, String> {
 | 
			
		||||
    // expecting query to be in format:
 | 
			
		||||
    // Gen 1:2
 | 
			
		||||
    // Gen 1:2-5
 | 
			
		||||
    // Gen 1
 | 
			
		||||
    // The book name needs to be just long enough to be unique
 | 
			
		||||
 | 
			
		||||
    let mut splits = chap_and_ver.split(':');
 | 
			
		||||
    let chapter = splits.next();
 | 
			
		||||
    let verse = splits.next();
 | 
			
		||||
 | 
			
		||||
    // ###########################################
 | 
			
		||||
    // Figure out what book they are talking about
 | 
			
		||||
fn parse_book(book: &str) -> Result<(usize, &str), String> {
 | 
			
		||||
    // Go thru the list of books and see which
 | 
			
		||||
    // match the passed book str
 | 
			
		||||
    let res = BOOKS_IN_ORDER
 | 
			
		||||
        .iter()
 | 
			
		||||
        .enumerate()
 | 
			
		||||
@@ -144,34 +134,51 @@ pub fn get(book: &str, chap_and_ver: &str, bibles: Vec<&Bible>) -> Result<String
 | 
			
		||||
            return Err(format!("'{book}' is not a book"));
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
    Ok((book_idx, book_name))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
    // Select the book in each Bible
 | 
			
		||||
    let books = bibles
 | 
			
		||||
        .iter()
 | 
			
		||||
        // Book are 1 indexed in the xml spec
 | 
			
		||||
        .map(|bible| (bible, bible.get_book_by_index(book_idx + 1)))
 | 
			
		||||
        .filter(|(_,e)| e.is_some())
 | 
			
		||||
        .map(|(bible,book)| (*bible,book.unwrap()))
 | 
			
		||||
        .collect::<Vec<(&Bible,&Book)>>();
 | 
			
		||||
 | 
			
		||||
    // Select the chapter in each Bible
 | 
			
		||||
    let chapters = if let Some(chapter) = chapter {
 | 
			
		||||
        if let Ok(ch_num) = chapter.parse::<usize>() {
 | 
			
		||||
            books
 | 
			
		||||
                .iter()
 | 
			
		||||
                .map(|(bible,book)| (bible, book, book.get_chapter_by_index(ch_num)))
 | 
			
		||||
                .filter(|(_,_,book)| book.is_some())
 | 
			
		||||
                .map(|(bible,book,chapter)| (*bible,*book,chapter.unwrap()))
 | 
			
		||||
                .collect::<Vec<(&Bible, &Book, &Chapter)>>()
 | 
			
		||||
fn parse_chapter<'a>(chapter_num: &str, book: &'a Book) -> Result<&'a Chapter, String> {
 | 
			
		||||
    let chapter = if let Ok(idx) = chapter_num.parse::<usize>() {
 | 
			
		||||
        if let Some(chapter) = book.get_chapter_by_index(idx) {
 | 
			
		||||
            chapter
 | 
			
		||||
        } else {
 | 
			
		||||
            return Err(format!("Chapter number could not be parsed from {chapter}"));
 | 
			
		||||
            return Err(format!("Chapter {idx} doesn't exist in book {}", BOOKS_IN_ORDER[book.number-1]));
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        return Err(format!("A chapter was not passed"));
 | 
			
		||||
        return Err(format!("Chapter number could not be parsed from {chapter_num}"));
 | 
			
		||||
    };
 | 
			
		||||
    Ok(chapter)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn get(book: &str, chap_and_ver: &str, bible: &Bible) -> Result<String, String> {
 | 
			
		||||
    // expecting query to be in format:
 | 
			
		||||
    // Gen 1:2
 | 
			
		||||
    // Gen 1:2-5
 | 
			
		||||
    // Gen 1
 | 
			
		||||
    // The book name needs to be just long enough to be unique
 | 
			
		||||
 | 
			
		||||
    let mut splits = chap_and_ver.split(':');
 | 
			
		||||
    let chapter_num = splits.next();
 | 
			
		||||
    let verse_num = splits.next();
 | 
			
		||||
    // ###########################################
 | 
			
		||||
 | 
			
		||||
    // Figure out what book they are talking about
 | 
			
		||||
    let (book_idx, book_name) = parse_book(book)?;
 | 
			
		||||
 | 
			
		||||
    let book = match bible.get_book_by_index(book_idx+1) {
 | 
			
		||||
        Some(s) => s,
 | 
			
		||||
        None => return Err(format!("Selected Bible {} doesn't contain book {book_name}", bible.translation_name)),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    // Figure out what chapter they are talking about
 | 
			
		||||
    let chapter = if let Some(ch) = chapter_num {
 | 
			
		||||
        parse_chapter(ch, book)?
 | 
			
		||||
    } else {
 | 
			
		||||
        return Err("No chapter number was passed".to_string());
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    // Get the verse in each Bible
 | 
			
		||||
    match verse {
 | 
			
		||||
    match verse_num {
 | 
			
		||||
        Some(verse) => {
 | 
			
		||||
            let mut splits = verse.split("-");
 | 
			
		||||
            let start = splits.next();
 | 
			
		||||
@@ -183,16 +190,14 @@ pub fn get(book: &str, chap_and_ver: &str, bibles: Vec<&Bible>) -> Result<String
 | 
			
		||||
                    if let (Ok(start), Ok(end)) = (sn.parse::<usize>(), en.parse::<usize>()) {
 | 
			
		||||
                        let mut buf = String::new();
 | 
			
		||||
 | 
			
		||||
                        let translation = &chapters[0].0.translation_name;
 | 
			
		||||
                        let translation = &bible.translation_name;
 | 
			
		||||
 | 
			
		||||
                        buf += &format!("{style_bold}[{translation}] {style_underline}{book_name}:{start}-{end}{style_reset}\n");
 | 
			
		||||
                        buf += &format!("{style_bold}[{translation}] {style_underline}{book_name}:{start}-{end}{style_reset}:\n");
 | 
			
		||||
                        for num in start..=end {
 | 
			
		||||
                            for (_, _, chapter) in &chapters {
 | 
			
		||||
                                if let Some(verse) = chapter.get_verse_by_index(num) {
 | 
			
		||||
                                    buf += &format!(
 | 
			
		||||
                                        "{}: {verse}\n", verse.number
 | 
			
		||||
                                    );
 | 
			
		||||
                                }
 | 
			
		||||
                            if let Some(verse) = chapter.get_verse_by_index(num) {
 | 
			
		||||
                                buf += &format!(
 | 
			
		||||
                                    "{}: {verse}\n", verse.number
 | 
			
		||||
                                );
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        return Ok(buf);
 | 
			
		||||
@@ -203,13 +208,11 @@ pub fn get(book: &str, chap_and_ver: &str, bibles: Vec<&Bible>) -> Result<String
 | 
			
		||||
                (Some(ver_num), None) => {
 | 
			
		||||
                    if let Ok(num) = ver_num.parse::<usize>() {
 | 
			
		||||
                        let mut buf = String::new();
 | 
			
		||||
                        for (bible, _book, chapter) in chapters {
 | 
			
		||||
                            if let Some(verse) = chapter.get_verse_by_index(num) {
 | 
			
		||||
                                buf += &format!(
 | 
			
		||||
                                    "{style_bold}[{}] {style_underline}{book_name} {}:{}{style_reset}: {verse}\n",
 | 
			
		||||
                                    bible.translation_name, chapter.number, verse.number
 | 
			
		||||
                                );
 | 
			
		||||
                            }
 | 
			
		||||
                        if let Some(verse) = chapter.get_verse_by_index(num) {
 | 
			
		||||
                            buf += &format!(
 | 
			
		||||
                                "{style_bold}[{}] {style_underline}{book_name} {}:{}{style_reset}:\n{verse}\n",
 | 
			
		||||
                                bible.translation_name, chapter.number, verse.number
 | 
			
		||||
                            );
 | 
			
		||||
                        }
 | 
			
		||||
                        return Ok(buf);
 | 
			
		||||
                    }
 | 
			
		||||
@@ -224,13 +227,11 @@ pub fn get(book: &str, chap_and_ver: &str, bibles: Vec<&Bible>) -> Result<String
 | 
			
		||||
        None => {
 | 
			
		||||
            // only chapter
 | 
			
		||||
            let mut buf = String::new();
 | 
			
		||||
            for (bible, _, chapter) in chapters {
 | 
			
		||||
                buf += &format!(
 | 
			
		||||
                    "{style_bold}[{}] {style_underline}{book_name} {}{style_reset}:\n",
 | 
			
		||||
                    bible.translation_name, chapter.number
 | 
			
		||||
                );
 | 
			
		||||
                buf += &format!("{}", chapter);
 | 
			
		||||
            }
 | 
			
		||||
            buf += &format!(
 | 
			
		||||
                "{style_bold}[{}] {style_underline}{book_name} {}{style_reset}:\n",
 | 
			
		||||
                bible.translation_name, chapter.number
 | 
			
		||||
            );
 | 
			
		||||
            buf += &format!("{}", chapter);
 | 
			
		||||
            return Ok(buf);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -291,6 +292,7 @@ struct Testament {
 | 
			
		||||
#[derive(Deserialize)]
 | 
			
		||||
struct Book {
 | 
			
		||||
    #[serde(rename = "@number")]
 | 
			
		||||
    /// Genesis is book 1
 | 
			
		||||
    number: usize,
 | 
			
		||||
    #[serde(rename = "chapter")]
 | 
			
		||||
    chapters: Vec<Chapter>,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user