Skip to main content

reifydb_core/interface/catalog/
series.rs

1// SPDX-License-Identifier: AGPL-3.0-or-later
2// Copyright (c) 2025 ReifyDB
3
4use reifydb_type::value::sumtype::SumTypeId;
5use serde::{Deserialize, Serialize};
6
7use crate::interface::catalog::{
8	column::ColumnDef,
9	id::{NamespaceId, SeriesId},
10	key::PrimaryKeyDef,
11};
12
13#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
14#[serde(rename_all = "lowercase")]
15pub enum TimestampPrecision {
16	Millisecond = 0,
17	Microsecond = 1,
18	Nanosecond = 2,
19}
20
21impl Default for TimestampPrecision {
22	fn default() -> Self {
23		TimestampPrecision::Millisecond
24	}
25}
26
27#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
28pub struct SeriesDef {
29	pub id: SeriesId,
30	pub namespace: NamespaceId,
31	pub name: String,
32	pub columns: Vec<ColumnDef>,
33	pub tag: Option<SumTypeId>,
34	pub precision: TimestampPrecision,
35	pub primary_key: Option<PrimaryKeyDef>,
36}
37
38#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
39pub struct SeriesMetadata {
40	pub id: SeriesId,
41	pub row_count: u64,
42	pub oldest_timestamp: i64,
43	pub newest_timestamp: i64,
44	pub sequence_counter: u64,
45}
46
47impl SeriesMetadata {
48	pub fn new(series_id: SeriesId) -> Self {
49		Self {
50			id: series_id,
51			row_count: 0,
52			oldest_timestamp: 0,
53			newest_timestamp: 0,
54			sequence_counter: 0,
55		}
56	}
57}