Skip to main content

reifydb_core/window/
store.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2026 ReifyDB
3
4use reifydb_value::{Result, value::row_number::RowNumber};
5use serde::{Serialize, de::DeserializeOwned};
6
7use crate::encoded::key::{EncodedKey, EncodedKeyRange};
8
9pub trait WindowStore {
10	fn state_get<V: DeserializeOwned>(&mut self, key: &EncodedKey) -> Result<Option<V>>;
11
12	fn state_get_many_visit<V: DeserializeOwned>(
13		&mut self,
14		keys: &[EncodedKey],
15		visit: &mut dyn FnMut(EncodedKey, V) -> Result<()>,
16	) -> Result<()>;
17
18	fn state_set<V: Serialize>(&mut self, key: &EncodedKey, value: &V) -> Result<()>;
19
20	fn state_remove(&mut self, key: &EncodedKey) -> Result<()>;
21
22	fn state_drop(&mut self, key: &EncodedKey) -> Result<()>;
23
24	fn internal_get<V: DeserializeOwned>(&mut self, key: &EncodedKey) -> Result<Option<V>>;
25
26	fn internal_get_many_visit<V: DeserializeOwned>(
27		&mut self,
28		keys: &[EncodedKey],
29		visit: &mut dyn FnMut(EncodedKey, V) -> Result<()>,
30	) -> Result<()>;
31
32	fn internal_set<V: Serialize>(&mut self, key: &EncodedKey, value: &V) -> Result<()>;
33
34	fn internal_remove(&mut self, key: &EncodedKey) -> Result<()>;
35
36	fn internal_drop(&mut self, key: &EncodedKey) -> Result<()>;
37
38	fn internal_range_visit<V: DeserializeOwned>(
39		&mut self,
40		range: EncodedKeyRange,
41		visit: &mut dyn FnMut(EncodedKey, V) -> Result<()>,
42	) -> Result<()>;
43
44	fn get_or_create_row_number(&mut self, key: &EncodedKey) -> Result<(RowNumber, bool)>;
45
46	fn get_or_create_row_numbers(&mut self, keys: &[EncodedKey]) -> Result<Vec<(RowNumber, bool)>>;
47
48	fn allocate_row_numbers(&mut self, count: u64) -> Result<RowNumber>;
49
50	fn clock_now_nanos(&self) -> u64;
51}