Skip to main content

storage_kit/core/query/
scroll.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{FilterExpr, StorageLocator, core::HasLocator};
4
5use super::{PageToken, Projection};
6
7/// Request to iterate records through a query-scoped scroll API.
8///
9/// # Examples
10///
11/// ```
12/// let request = storage_kit::database::query::ScrollRequest {
13///     locator: storage_kit::database::StorageLocator::new("documents"),
14///     filter: None,
15///     projection: storage_kit::database::query::Projection::All,
16///     limit: Some(50),
17///     offset: None,
18///     page_token: None,
19/// };
20/// assert_eq!(request.limit, Some(50));
21/// ```
22#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
23pub struct ScrollRequest {
24    /// Collection that should be scanned through the scroll API.
25    pub locator: StorageLocator,
26    /// Optional predicate used to restrict the scrolled rows.
27    pub filter: Option<FilterExpr>,
28    /// Projection to apply to returned records.
29    pub projection: Projection,
30    /// Maximum number of rows to return in one page.
31    pub limit: Option<usize>,
32    /// Number of rows to skip before producing the current page.
33    pub offset: Option<usize>,
34    /// Continuation token returned by a previous scroll page.
35    pub page_token: Option<PageToken>,
36}
37
38impl HasLocator for ScrollRequest {
39    fn locator_mut(&mut self) -> &mut StorageLocator {
40        &mut self.locator
41    }
42}