format aperture in backtrack trace
[scpubgit/DX.git] / lib / DX / Predicate / Eq.pm
1 package DX::Predicate::Eq;
2
3 use DX::Utils qw(rspace res CONTENTS_OF expand_deps);
4 use DX::Class;
5
6 with 'DX::Role::Predicate';
7
8 sub _resolution_space_for {
9   my ($self, $left, $right) = @_;
10
11   my $deps = expand_deps([
12     [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ]
13   ]);
14
15   my $aperture = [ map @{$_->aperture_for_set_value}, $left, $right ];
16
17   if ($left->equals($right)) {
18     return rspace(
19       geometry_depends_on => $deps,
20       aperture => $aperture,
21       members => [
22         res(
23           actions => [],
24           veracity_depends_on => $deps,
25         )
26       ]
27     );
28   }
29
30   my @members = map {
31     my ($set_this, $to_this) = @$_;
32     res(
33       actions => [ $set_this->action_for_set_value($to_this) ],
34       veracity_depends_on => $deps,
35     );
36   } grep {
37     $_->[0]->can_set_value
38   } (
39     [ $left, $right ],
40     [ $right, $left ],
41   );
42
43   return rspace(
44     geometry_depends_on => $deps,
45     aperture => $aperture,
46     members => \@members,
47   );
48 }
49
50 1;