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
use super::*;
use ExecutedState::Par;
#[derive(Default, Debug, Copy, Clone)]
pub struct MergerParResult {
pub prev_par: Option<ParResult>,
pub current_par: Option<ParResult>,
}
pub(crate) fn try_merge_next_state_as_par(data_keeper: &mut DataKeeper) -> MergeResult<MergerParResult> {
let prev_state = data_keeper.prev_slider_mut().next_state();
let current_state = data_keeper.current_slider_mut().next_state();
let result = match (prev_state, current_state) {
(Some(Par(prev_par)), Some(Par(current_par))) => MergerParResult::from_pars(prev_par, current_par),
(None, Some(Par(current_par))) => MergerParResult::from_current_par(current_par),
(Some(Par(prev_par)), None) => MergerParResult::from_prev_par(prev_par),
(None, None) => MergerParResult::default(),
(prev_state, current_state) => return Err(MergeError::incompatible_states(prev_state, current_state, "par")),
};
Ok(result)
}
impl MergerParResult {
pub(self) fn from_pars(prev_par: ParResult, current_par: ParResult) -> Self {
Self {
prev_par: Some(prev_par),
current_par: Some(current_par),
}
}
pub(self) fn from_prev_par(prev_par: ParResult) -> Self {
Self {
prev_par: Some(prev_par),
current_par: None,
}
}
pub(self) fn from_current_par(current_par: ParResult) -> Self {
Self {
prev_par: None,
current_par: Some(current_par),
}
}
}