Skip to main content

reifydb_core/interface/catalog/
namespace.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2026 ReifyDB
3
4use crate::interface::catalog::id::{NamespaceId, RESERVED_USER_ID_START};
5
6impl NamespaceId {
7	pub const fn is_system(&self) -> bool {
8		self.0 < RESERVED_USER_ID_START
9	}
10
11	pub const ROOT: NamespaceId = NamespaceId(0);
12	pub const SYSTEM: NamespaceId = NamespaceId(1);
13	pub const DEFAULT: NamespaceId = NamespaceId(2);
14	pub const SYSTEM_CONFIG: NamespaceId = NamespaceId(3);
15	pub const SYSTEM_METRICS: NamespaceId = NamespaceId(4);
16	pub const SYSTEM_METRICS_STORAGE: NamespaceId = NamespaceId(5);
17	pub const SYSTEM_METRICS_CDC: NamespaceId = NamespaceId(6);
18	pub const SYSTEM_PROCEDURES: NamespaceId = NamespaceId(7);
19	pub const SYSTEM_BINDINGS: NamespaceId = NamespaceId(8);
20	pub const RQL: NamespaceId = NamespaceId(9);
21	pub const SYSTEM_METRICS_PROFILER: NamespaceId = NamespaceId(10);
22	pub const SYSTEM_METRICS_PROFILER_SPANS: NamespaceId = NamespaceId(11);
23	pub const SYSTEM_METRICS_RUNTIME: NamespaceId = NamespaceId(12);
24	pub const SYSTEM_METRICS_RUNTIME_MEMORY: NamespaceId = NamespaceId(13);
25	pub const SYSTEM_METRICS_RUNTIME_WATERMARKS: NamespaceId = NamespaceId(14);
26	pub const SYSTEM_METRICS_RUNTIME_OPERATORS: NamespaceId = NamespaceId(15);
27	pub const SYSTEM_METRICS_PROC: NamespaceId = NamespaceId(16);
28	pub const SYSTEM_METRICS_PROC_PROCESS: NamespaceId = NamespaceId(17);
29	pub const SYSTEM_METRICS_PROC_PROCESS_IO: NamespaceId = NamespaceId(18);
30	pub const SYSTEM_METRICS_PROC_PROCESS_MEMORY: NamespaceId = NamespaceId(19);
31	pub const SYSTEM_METRICS_PROC_PROCESS_SCHED: NamespaceId = NamespaceId(20);
32	pub const SYSTEM_METRICS_PROC_CGROUP: NamespaceId = NamespaceId(21);
33	pub const SYSTEM_METRICS_PROC_CGROUP_IO: NamespaceId = NamespaceId(22);
34	pub const SYSTEM_METRICS_PROC_CGROUP_MEMORY: NamespaceId = NamespaceId(23);
35	pub const SYSTEM_METRICS_PROC_CGROUP_CPU: NamespaceId = NamespaceId(24);
36	pub const SYSTEM_METRICS_PROC_CGROUP_PRESSURE: NamespaceId = NamespaceId(25);
37	pub const SYSTEM_METRICS_STORE: NamespaceId = NamespaceId(26);
38	pub const SYSTEM_METRICS_STORE_MULTI: NamespaceId = NamespaceId(27);
39	pub const SYSTEM_METRICS_STORE_MULTI_COMMIT: NamespaceId = NamespaceId(28);
40	pub const SYSTEM_METRICS_STORE_MULTI_PERSISTENT: NamespaceId = NamespaceId(29);
41	pub const SYSTEM_METRICS_STORE_SINGLE: NamespaceId = NamespaceId(30);
42	pub const SYSTEM_METRICS_STORE_SINGLE_COMMIT: NamespaceId = NamespaceId(31);
43	pub const SYSTEM_METRICS_STORE_SINGLE_PERSISTENT: NamespaceId = NamespaceId(32);
44	pub const SYSTEM_METRICS_STORE_OPERATOR: NamespaceId = NamespaceId(33);
45	pub const SYSTEM_METRICS_STORE_OPERATOR_PERSISTENT: NamespaceId = NamespaceId(37);
46	pub const SYSTEM_METRICS_INSTRUMENTS: NamespaceId = NamespaceId(38);
47	pub const SYSTEM_METRICS_EPOCH: NamespaceId = NamespaceId(39);
48	pub const SYSTEM_METRICS_LIFECYCLE: NamespaceId = NamespaceId(40);
49	pub const SYSTEM_SOURCE: NamespaceId = NamespaceId(41);
50	pub const STORAGE: NamespaceId = NamespaceId(42);
51	pub const SYSTEM_METRICS_FLOW: NamespaceId = NamespaceId(43);
52	pub const SYSTEM_METRICS_FLOW_STATE: NamespaceId = NamespaceId(44);
53	pub const SYSTEM_METRICS_STORE_OPERATOR_RANGE: NamespaceId = NamespaceId(46);
54	pub const SYSTEM_METRICS_STORE_OPERATOR_RANGE_KEYSPACE: NamespaceId = NamespaceId(47);
55	pub const SYSTEM_METRICS_STORE_MULTI_RANGE: NamespaceId = NamespaceId(52);
56	pub const SYSTEM_METRICS_STORE_MULTI_POINT: NamespaceId = NamespaceId(53);
57	pub const SYSTEM_METRICS_STORE_CDC: NamespaceId = NamespaceId(48);
58	pub const SYSTEM_METRICS_STORE_CDC_COMMIT: NamespaceId = NamespaceId(49);
59	pub const SYSTEM_METRICS_STORE_CDC_READ: NamespaceId = NamespaceId(50);
60	pub const SYSTEM_METRICS_STORE_CDC_PERSISTENT: NamespaceId = NamespaceId(51);
61	pub const GRAPHQL: NamespaceId = NamespaceId(55);
62}
63
64#[derive(Debug, Clone, PartialEq)]
65pub enum Namespace {
66	Local {
67		id: NamespaceId,
68		name: String,
69		local_name: String,
70		parent_id: NamespaceId,
71	},
72	Remote {
73		id: NamespaceId,
74		name: String,
75		local_name: String,
76		parent_id: NamespaceId,
77		address: String,
78		token: Option<String>,
79	},
80}
81
82impl Namespace {
83	pub fn id(&self) -> NamespaceId {
84		match self {
85			Namespace::Local {
86				id,
87				..
88			}
89			| Namespace::Remote {
90				id,
91				..
92			} => *id,
93		}
94	}
95
96	pub fn name(&self) -> &str {
97		match self {
98			Namespace::Local {
99				name,
100				..
101			}
102			| Namespace::Remote {
103				name,
104				..
105			} => name,
106		}
107	}
108
109	pub fn local_name(&self) -> &str {
110		match self {
111			Namespace::Local {
112				local_name,
113				..
114			}
115			| Namespace::Remote {
116				local_name,
117				..
118			} => local_name,
119		}
120	}
121
122	pub fn parent_id(&self) -> NamespaceId {
123		match self {
124			Namespace::Local {
125				parent_id,
126				..
127			}
128			| Namespace::Remote {
129				parent_id,
130				..
131			} => *parent_id,
132		}
133	}
134
135	pub fn address(&self) -> Option<&str> {
136		match self {
137			Namespace::Remote {
138				address,
139				..
140			} => Some(address),
141			_ => None,
142		}
143	}
144
145	pub fn token(&self) -> Option<&str> {
146		match self {
147			Namespace::Remote {
148				token,
149				..
150			} => token.as_deref(),
151			_ => None,
152		}
153	}
154
155	pub fn is_remote(&self) -> bool {
156		matches!(self, Namespace::Remote { .. })
157	}
158
159	pub fn system() -> Self {
160		Self::Local {
161			id: NamespaceId::SYSTEM,
162			name: "system".to_string(),
163			local_name: "system".to_string(),
164			parent_id: NamespaceId::ROOT,
165		}
166	}
167
168	pub fn default_namespace() -> Self {
169		Self::Local {
170			id: NamespaceId::DEFAULT,
171			name: "default".to_string(),
172			local_name: "default".to_string(),
173			parent_id: NamespaceId::ROOT,
174		}
175	}
176}