60bcd426b5cf5fe7020013a389741fc3c5869acb
[scpubgit/DX.git] / lib / DX / Predicate / Eq.pm
1 package DX::Predicate::Eq;
2
3 use DX::Utils qw(step CONTENTS_OF);
4 use DX::Class;
5
6 with 'DX::Role::Predicate';
7
8 sub _possible_resolution_list {
9   my ($self, $left, $right) = @_;
10   if ($left->equals($right)) {
11     return step(
12       actions => [],
13       depends_on => [
14         [ undef ,=> [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ] ]
15       ],
16     );
17   }
18   return (
19     do {
20       if ($left->is_set and my $set = $right->action_for_set_value($left)) {
21         step(
22           actions => [ $set ],
23           depends_on => [
24             [ $right =>
25               [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ]
26             ]
27           ]
28         )
29       } else {
30         ()
31       }
32     },
33     do {
34       if ($right->is_set and my $set = $left->action_for_set_value($right)) {
35         step(
36           actions => [ $set ],
37           depends_on => [
38             [ $left =>
39               [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ]
40             ]
41           ]
42         )
43       } else {
44         ()
45       }
46     },
47   );
48 }
49
50 1;