Pagination

Once the irrelevant rows have been filtered out, the execute_query function applies the limit and offset arguments by calling the `paginate function:

    let paginated: Vec<Row> = paginate(filtered.into_iter(), query.limit, query.offset);

The paginate function is implemented using the skip and take functions on iterators:

fn paginate<I: Iterator>(collection: I, limit: Option<u32>, offset: Option<u32>) -> Vec<I::Item> {
    let start = offset.unwrap_or(0).try_into().unwrap();
    match limit {
        Some(n) => collection.skip(start).take(n.try_into().unwrap()).collect(),
        None => collection.skip(start).collect(),
    }
}