package Data::Enumerator::Mapper;
use strict;
use warnings;
use List::MoreUtils qw/zip/;
use base qw/Data::Enumerator::Base/;
sub iterator {
my ( $self ) = @_;
my ($object,$mapper ) = @{$self->object};
my $mapper_func = __compose_mapper($mapper);
my $object_iter = $object->iterator;
return sub{
my $value = $object_iter->();
return $self->LAST if $self->is_last( $value );
return $mapper_func->( $value );
}
}
sub __compose_mapper{
my ( $mapper ) = @_;
return $mapper if ref $mapper eq 'CODE';
return sub{
my ( $value ) = @_;
return +{
zip @$mapper,@$value
}
}
}
1;