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}