///|
/// A paginated result carrying an optional cursor for the next page.
pub(all) struct Paginated[T] {
  items : Array[T]
  next_cursor : String?
} derive(Debug, Eq)

///|
/// Construct a paginated result with no next cursor.
pub fn[T] Paginated::new(items : Array[T]) -> Paginated[T] {
  { items, next_cursor: None }
}

///|
/// Construct a paginated result with a next cursor.
pub fn[T] Paginated::with_cursor(
  items : Array[T],
  cursor : String,
) -> Paginated[T] {
  { items, next_cursor: Some(cursor) }
}