use crate::{
db::{AdminBatchRequest, PagedResponse, session::load::FluentLoadQuery},
error::Error,
traits::Entity,
};
use icydb_core as core;
impl<E: Entity> FluentLoadQuery<'_, E> {
pub fn page(self, limit: u32) -> Result<PagedResponse<E>, Error> {
Ok(Self::paged_response_from_execution(self.inner.page(limit)?))
}
pub fn next_page(
self,
limit: u32,
cursor: impl Into<String>,
) -> Result<PagedResponse<E>, Error> {
Ok(Self::paged_response_from_execution(
self.inner.next_page(limit, cursor)?,
))
}
pub fn admin_batch(self, request: AdminBatchRequest) -> Result<PagedResponse<E>, Error> {
Ok(Self::paged_response_from_execution(
self.inner.admin_batch(request)?,
))
}
fn paged_response_from_execution(
execution: core::db::PagedLoadExecution<E>,
) -> PagedResponse<E> {
let read_intent = execution.read_intent();
let (response, continuation_cursor) = execution.into_response_and_cursor();
let next_cursor = continuation_cursor
.as_deref()
.map(core::db::encode_hex_lower);
PagedResponse::new(response.entities(), next_cursor, read_intent)
}
}