pub(crate) trait Cursor<'a, T>: Send {
// Required methods
fn state(&self) -> &State<'a>;
fn state_mut(&mut self) -> &mut State<'a>;
fn count(&self) -> (usize, Option<usize>);
fn fetch(&self) -> Option<T>;
fn seek(&mut self);
// Provided methods
fn get(&self) -> Option<Result<T>> { ... }
fn seek_and_get(&mut self) -> Option<Result<T>> { ... }
}