Commit | Line | Data |
d6b0c811 |
1 | package DX::Step::CompleteResolution; |
2 | |
3 | use DX::Class; |
4 | |
5 | with 'DX::Role::Step'; |
6 | |
7 | has original_search_state => ( |
8 | is => 'ro', isa => SearchState, required => 1 |
9 | ); |
10 | |
11 | has resolution_space => ( |
12 | is => 'ro', isa => ResolutionSpace, required => 1 |
13 | ); |
14 | |
15 | sub apply_to { |
16 | my ($self, $old_ss) = @_; |
17 | my $orig_ss = $self->original_search_state; |
18 | my $ns = do { |
19 | if (my $prop = $orig_ss->next_proposition) { |
20 | $prop->consider_step |
21 | } else { |
22 | $old_ss->on_solution_step |
23 | } |
24 | }; |
25 | return $old_ss->but( |
26 | next_step => $ns, |
27 | decisions_taken => [ |
28 | [ $self->resolution_space, $orig_ss ], |
29 | @{$old_ss->decisions_taken} |
30 | ], |
31 | ); |
32 | } |
33 | |
34 | 1; |