Skip to main content

reifydb_core/
row.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2025 ReifyDB
3
4use reifydb_type::value::row_number::RowNumber;
5use serde::{Deserialize, Serialize};
6
7use crate::encoded::{row::EncodedRow, shape::RowShape};
8
9#[derive(Debug, Clone)]
10pub struct Row {
11	pub number: RowNumber,
12	pub encoded: EncodedRow,
13	pub shape: RowShape,
14}
15
16/// TTL (Time-To-Live) configuration for automatic row expiration.
17#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
18pub struct RowTtl {
19	/// Duration in nanoseconds after which rows expire
20	pub duration_nanos: u64,
21	/// Which row timestamp to measure from
22	pub anchor: RowTtlAnchor,
23	/// How expired rows are cleaned up
24	pub cleanup_mode: RowTtlCleanupMode,
25}
26
27/// Which row timestamp the TTL duration is measured from
28#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
29pub enum RowTtlAnchor {
30	/// Measure from `created_at` (default)
31	#[default]
32	Created,
33
34	/// Measure from `updated_at` — updates extend the row's lifetime
35	Updated,
36}
37
38/// How expired rows are cleaned up
39#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
40pub enum RowTtlCleanupMode {
41	/// Create tombstones and CDC entries — maintains audit trail
42	Delete,
43
44	/// Silent removal from storage — no CDC entries, no tombstones
45	Drop,
46}