Commit | Line | Data |
b40e416a |
1 | package DX::Op::MemberOf; |
2 | |
3 | use DX::ArrayStream; |
4ce2e778 |
4 | use DX::RefSet; |
b40e416a |
5 | use Moo; |
6 | |
7 | with 'DX::Role::Op'; |
8 | |
9 | has member_var => (is => 'ro', required => 1); |
385fa954 |
10 | has coll_var => (is => 'ro', required => 1); |
b40e416a |
11 | |
12 | sub run { |
13 | my ($self, $state) = @_; |
385fa954 |
14 | ($state, my %args) = $self->_expand_args($state, |
15 | member => $self->member_var, |
16 | of => $self->coll_var |
17 | ); |
18 | my ($member, $of) = @args{qw(member of)}; |
b40e416a |
19 | die "member bound" if $member->is_bound; |
4ce2e778 |
20 | my $set = $state->facts->{my $type = $state->resolve_value($of)}; |
21 | my $ref_set = DX::RefSet->new( |
22 | target => $type, names => [ $set->key_list ], |
23 | ); |
7a0670cd |
24 | return $state->then($self->next) |
25 | ->add_dependencies($member->id, $of->id) |
4ce2e778 |
26 | ->bind_root_set($member->id, $ref_set) |
b40e416a |
27 | } |
28 | |
29 | 1; |