···
···
Reference(book: String, chapter: Int, verse: Int)
pub fn parse_reference(input: String) -> Result(Reference, String) {
let parts = string.split(input, on: " ")
···
case int.parse(verse_s) {
Ok(Reference(book: string.uppercase(book), chapter:, verse:))
-
Error(_) -> Error("Invalid verse" <> verse_s)
-
Error(_) -> Error("Invalid chapter" <> chapter_s)
_ -> Error("invalid parse")
···
let assert Ok(reference) = parse_reference(search)
-
list.each(biblelines, fn(line) {
-
"THE BOOK OF " <> book if book == reference.book -> io.println(book)
···
···
Reference(book: String, chapter: Int, verse: Int)
+
verse_text: Result(String, String),
pub fn parse_reference(input: String) -> Result(Reference, String) {
let parts = string.split(input, on: " ")
···
case int.parse(verse_s) {
Ok(Reference(book: string.uppercase(book), chapter:, verse:))
+
Error(_) -> Error("Invalid verse: " <> verse_s)
+
Error(_) -> Error("Invalid chapter: " <> chapter_s)
+
[book_p1, book_p2, chapter_s, verse_s] ->
+
case int.parse(chapter_s) {
+
case int.parse(verse_s) {
+
book: string.uppercase(book_p1 <> " " <> book_p2),
+
Error(_) -> Error("Invalid verse: " <> verse_s)
+
Error(_) -> Error("Invalid chapter: " <> chapter_s)
_ -> Error("invalid parse")
···
let assert Ok(reference) = parse_reference(search)
+
verse_text: Error("Verse not found"),
+
list.fold(biblelines, inital, fn(state, line) -> ScanState {
+
"THE BOOK OF " <> book ->
+
case book == state.ref.book {
+
True -> ScanState(..state, phase: Chapter, found_book: True)
+
"CHAPTER " <> chapter ->
+
case result.unwrap(int.parse(chapter), 0) == state.ref.chapter {
+
True -> ScanState(..state, phase: Verse, found_chapter: True)
+
let parts = string.split(line, " ")
+
case result.unwrap(int.parse(first), 0) == state.ref.verse {
+
verse_text: Ok(string.join(rest, " ")),
+
case result.verse_text {
+
<> int.to_string(result.ref.chapter)
+
<> int.to_string(result.ref.chapter)
+
Error(e) -> io.println_error(e)