+28
-15
src/bible_search.gleam
+28
-15
src/bible_search.gleam
···
29
29
)
30
30
}
31
31
32
+
pub type ScanResult {
33
+
ScanResult(ref: Reference, verse: Result(String, String))
34
+
}
35
+
32
36
pub fn parse_reference(input: String) -> Result(Reference, String) {
33
37
let parts = string.split(input, on: " ")
34
38
···
62
66
}
63
67
}
64
68
65
-
pub fn main() -> Nil {
66
-
let assert Ok(bible) = simplifile.read(from: filepath)
67
-
68
-
let biblelines = string.split(bible, on: "\n")
69
-
70
-
let assert Ok(search) = input(prompt: "> ")
71
-
72
-
let assert Ok(reference) = parse_reference(search)
73
-
74
-
let inital =
69
+
pub fn bible_scan(
70
+
reference reference: Reference,
71
+
bible bible: String,
72
+
) -> ScanResult {
73
+
let inital_state =
75
74
ScanState(
76
75
phase: Book,
77
76
ref: reference,
···
80
79
verse_text: Error("Verse not found"),
81
80
)
82
81
82
+
let bible_lines = string.split(bible, "\n")
83
+
83
84
let result =
84
-
list.fold(biblelines, inital, fn(state, line) -> ScanState {
85
+
list.fold(bible_lines, inital_state, fn(state, line) -> ScanState {
85
86
case state.phase {
86
87
Done -> state
87
88
Book ->
···
122
123
}
123
124
})
124
125
125
-
case result.verse_text {
126
+
ScanResult(ref: reference, verse: result.verse_text)
127
+
}
128
+
129
+
pub fn main() -> Nil {
130
+
let assert Ok(bible) = simplifile.read(from: filepath)
131
+
132
+
let assert Ok(search) = input(prompt: "> ")
133
+
134
+
let assert Ok(reference) = parse_reference(search)
135
+
136
+
let scan = bible_scan(reference, bible)
137
+
138
+
case scan.verse {
126
139
Ok(text) ->
127
140
io.println(
128
-
result.ref.book
141
+
scan.ref.book
129
142
<> " "
130
-
<> int.to_string(result.ref.chapter)
143
+
<> int.to_string(scan.ref.chapter)
131
144
<> ":"
132
-
<> int.to_string(result.ref.verse)
145
+
<> int.to_string(scan.ref.verse)
133
146
<> " "
134
147
<> text,
135
148
)