The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package TAEB::Message::SelectSubset;
use Moose::Role;

has items => (
    is         => 'ro',
    isa        => 'ArrayRef',
    required   => 1,
    auto_deref => 1,
);

has _is_selected => (
    is      => 'ro',
    isa     => 'ArrayRef',
    lazy    => 1,
    default => sub { [ 0 x shift->items ] },
);

sub select {
    my $self = shift;

    for my $selection (@_) {
        for my $index (0 .. $self->items - 1) {
            my $item = $self->items->[$index];
            $self->_is_selected->[$index] = 1 if $item eq $selection;
        }
    }
}

sub selected {
    my $self = shift;

    return map  { $self->items->[$_] }
           grep { $self->_selected->[$_] }
           0 .. $self->items - 1;
}

no Moose::Role;

1;