The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Catmandu::Store::MongoDB::Searcher;
# TODO make a common Searcher role in Catmandu

use Catmandu::Sane;
use Moo;

with 'Catmandu::Iterable';

has bag   => (is => 'ro', required => 1);
has query => (is => 'ro', required => 1);
has start => (is => 'ro', required => 1);
has limit => (is => 'ro', required => 1);
has total => (is => 'ro');
has sort  => (is => 'ro');

# look at search, generator methods of bag
sub generator {
    my ($self) = @_;
    confess "Not Implemented";
}

# copied from ElasticSearch implementation
sub slice { # TODO constrain total?
    my ($self, $start, $total) = @_;
    $start //= 0;
    $self->new(
        bag   => $self->bag,
        query => $self->query,
        start => $self->start + $start,
        limit => $self->limit,
        total => $total,
        sort  => $self->sort,
    );
}

# optimized version of Iterable search
# look at search method of bag
sub count {
    confess "Not Implemented";
}

1;