1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
use std::fmt::{Debug, Formatter};
use anyhow::Error;
use crate::{
input::Event,
module::{ExitStatus, State},
search::Searchable,
};
#[allow(variant_size_differences)]
pub(crate) enum Artifact {
ChangeState(State),
EnqueueResize,
Error(Error, Option<State>),
Event(Event),
ExitStatus(ExitStatus),
ExternalCommand((String, Vec<String>)),
SearchCancel,
SearchTerm(String),
Searchable(Box<dyn Searchable>),
}
impl Debug for Artifact {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match *self {
Self::ChangeState(state) => write!(f, "ChangeState({state:?})"),
Self::EnqueueResize => write!(f, "EnqueueResize"),
Self::Error(ref err, state) => write!(f, "Error({err}, {state:?})"),
Self::Event(event) => write!(f, "Event({event:?})"),
Self::ExitStatus(status) => write!(f, "ExitStatus({status:?})"),
Self::ExternalCommand((ref command, ref args)) => write!(f, "ExternalCommand({command:?}, {args:?})"),
Self::SearchCancel => write!(f, "SearchCancel"),
Self::SearchTerm(ref term) => write!(f, "SearchTerm({term:?})"),
Self::Searchable(_) => write!(f, "Searchable(dyn Searchable)"),
}
}
}
#[cfg(test)]
mod tests {
use anyhow::anyhow;
use rstest::rstest;
use super::*;
use crate::{
search::{Interrupter, SearchResult},
test_helpers::mocks,
};
#[rstest]
#[case::change_state(Artifact::ChangeState(State::List), "ChangeState(List)")]
#[case::enqueue_resize(Artifact::EnqueueResize, "EnqueueResize")]
#[case::error(Artifact::Error(anyhow!("Error"), Some(State::List)), "Error(Error, Some(List))")]
#[case::event(Artifact::Event(Event::None), "Event(None)")]
#[case::exit_status(Artifact::ExitStatus(ExitStatus::Abort), "ExitStatus(Abort)")]
#[case::external_command(Artifact::ExternalCommand((String::from("foo"), vec![])), "ExternalCommand(\"foo\", [])")]
#[case::search_cancel(Artifact::SearchCancel, "SearchCancel")]
#[case::search_term(Artifact::SearchTerm(String::from("foo")), "SearchTerm(\"foo\")")]
#[case::searchable(
Artifact::Searchable(Box::new(mocks::Searchable::new())),
"Searchable(dyn Searchable)"
)]
fn debug(#[case] artifact: Artifact, #[case] expected: &str) {
assert_eq!(format!("{artifact:?}"), expected);
}
}
|