Commit | Line | Data |
b40e416a |
1 | package DX::Op::MemberLookup; |
2 | |
3 | use Moo; |
4 | |
5 | with 'DX::Role::Op'; |
6 | |
7 | has member_var => (is => 'ro', required => 1); |
8 | has coll_name => (is => 'ro', required => 1); |
9 | has key_name => (is => 'ro', required => 1); |
10 | has key_var => (is => 'ro', required => 1); |
11 | |
12 | sub run { |
13 | my ($self, $state) = @_; |
14 | my ($member, $key) = map $state->scope_var($self->$_), qw(member_var key_var); |
15 | die "key unbound" unless $key->is_bound; |
16 | die "member bound" if $member->is_bound; |
17 | my $set = $state->facts->{$self->coll_name}; |
18 | if (my $value = $set->{$key->bound_value}) { |
19 | return $state->bind_var_then($member, $value, $self->next); |
20 | } |
21 | return $state->backtrack; |
22 | } |
23 | |
24 | 1; |