aboutsummaryrefslogtreecommitdiff
path: root/src/gui/question.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/question.rs')
-rw-r--r--src/gui/question.rs90
1 files changed, 43 insertions, 47 deletions
diff --git a/src/gui/question.rs b/src/gui/question.rs
index 211bcda..5f060e3 100644
--- a/src/gui/question.rs
+++ b/src/gui/question.rs
@@ -28,7 +28,7 @@ enum Answer {
pub fn ask<B: Backend>(
terminal: &mut Terminal<B>,
events: &Events,
- title: &String,
+ title: &str,
card: &Card,
) -> Result<Difficulty> {
let mut state = State {
@@ -59,7 +59,7 @@ pub fn ask<B: Backend>(
let question = Paragraph::new(util::center_vertically(chunks[1], &card.question))
.style(match state.answer {
Answer::Write => {
- if state.input == "" {
+ if state.input.is_empty() {
Style::default().fg(Color::Yellow)
} else {
Style::default()
@@ -86,47 +86,44 @@ pub fn ask<B: Backend>(
.wrap(Wrap { trim: true });
f.render_widget(answer, chunks[2]);
- match state.answer {
- Answer::Difficulty {
- difficulty: selected,
- } => {
- if !is_correct(&state.input, &card.responses) || card.responses.len() > 1 {
- let paragraph = Paragraph::new(util::center_vertically(
- chunks[3],
- &serialization::words_to_line(&card.responses),
- ))
- .alignment(Alignment::Center);
- f.render_widget(paragraph, chunks[3]);
- };
+ if let Answer::Difficulty {
+ difficulty: selected,
+ } = state.answer
+ {
+ if !is_correct(&state.input, &card.responses) || card.responses.len() > 1 {
+ let paragraph = Paragraph::new(util::center_vertically(
+ chunks[3],
+ &serialization::words_to_line(&card.responses),
+ ))
+ .alignment(Alignment::Center);
+ f.render_widget(paragraph, chunks[3]);
+ };
- let difficulties = card.state.difficulties();
- let l = difficulties.len();
- let sep = Span::styled(" • ", Style::default());
- let tabs = difficulties
- .iter()
- .enumerate()
- .map(|(i, d)| {
- let style = if *d == selected {
- Style::default()
- .fg(Color::Yellow)
- .add_modifier(Modifier::UNDERLINED)
- } else {
- Style::default().add_modifier(Modifier::DIM)
- };
- let d = Span::styled(difficulty::label(*d), style);
- if i < l - 1 {
- [d, sep.clone()].to_vec()
- } else {
- [d].to_vec()
- }
- })
- .collect::<Vec<Vec<Span>>>()
- .concat();
- let p =
- Paragraph::new(Text::from(Spans::from(tabs))).alignment(Alignment::Center);
- f.render_widget(p, chunks[4]);
- }
- _ => {}
+ let difficulties = card.state.difficulties();
+ let l = difficulties.len();
+ let sep = Span::styled(" • ", Style::default());
+ let tabs = difficulties
+ .iter()
+ .enumerate()
+ .map(|(i, d)| {
+ let style = if *d == selected {
+ Style::default()
+ .fg(Color::Yellow)
+ .add_modifier(Modifier::UNDERLINED)
+ } else {
+ Style::default().add_modifier(Modifier::DIM)
+ };
+ let d = Span::styled(difficulty::label(*d), style);
+ if i < l - 1 {
+ [d, sep.clone()].to_vec()
+ } else {
+ [d].to_vec()
+ }
+ })
+ .collect::<Vec<Vec<Span>>>()
+ .concat();
+ let p = Paragraph::new(Text::from(Spans::from(tabs))).alignment(Alignment::Center);
+ f.render_widget(p, chunks[4]);
}
})?;
@@ -171,15 +168,14 @@ pub fn ask<B: Backend>(
}
}
-fn is_correct(input: &String, responses: &Vec<String>) -> bool {
+fn is_correct(input: &str, responses: &[String]) -> bool {
responses
.iter()
- .map(|r| r.split("(").collect::<Vec<&str>>()[0].trim())
- .collect::<Vec<&str>>()
- .contains(&input.as_str())
+ .map(|r| r.split('(').collect::<Vec<&str>>()[0].trim())
+ .any(|x| x == input)
}
-fn relative_element<T: Clone + PartialEq>(xs: &Vec<T>, x: &T, ri: i32) -> Option<T> {
+fn relative_element<T: Clone + PartialEq>(xs: &[T], x: &T, ri: i32) -> Option<T> {
let i = xs.iter().position(|t| t == x)? as i32 + ri;
if i >= 0 && i < xs.len() as i32 {
Some(xs[i as usize].clone())