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 SYSTEM_FLOW: NamespaceId = NamespaceId(54);
62	pub const GRAPHQL: NamespaceId = NamespaceId(55);
63	pub const SYSTEM_FLOW_OPERATOR: NamespaceId = NamespaceId(56);
64	pub const SYSTEM_FLOW_OPERATOR_LIBRARY: NamespaceId = NamespaceId(57);
65}
66
67#[derive(Debug, Clone, PartialEq)]
68pub enum Namespace {
69	Local {
70		id: NamespaceId,
71		name: String,
72		local_name: String,
73		parent_id: NamespaceId,
74	},
75	Remote {
76		id: NamespaceId,
77		name: String,
78		local_name: String,
79		parent_id: NamespaceId,
80		address: String,
81		token: Option<String>,
82	},
83}
84
85impl Namespace {
86	pub fn id(&self) -> NamespaceId {
87		match self {
88			Namespace::Local {
89				id,
90				..
91			}
92			| Namespace::Remote {
93				id,
94				..
95			} => *id,
96		}
97	}
98
99	pub fn name(&self) -> &str {
100		match self {
101			Namespace::Local {
102				name,
103				..
104			}
105			| Namespace::Remote {
106				name,
107				..
108			} => name,
109		}
110	}
111
112	pub fn local_name(&self) -> &str {
113		match self {
114			Namespace::Local {
115				local_name,
116				..
117			}
118			| Namespace::Remote {
119				local_name,
120				..
121			} => local_name,
122		}
123	}
124
125	pub fn parent_id(&self) -> NamespaceId {
126		match self {
127			Namespace::Local {
128				parent_id,
129				..
130			}
131			| Namespace::Remote {
132				parent_id,
133				..
134			} => *parent_id,
135		}
136	}
137
138	pub fn address(&self) -> Option<&str> {
139		match self {
140			Namespace::Remote {
141				address,
142				..
143			} => Some(address),
144			_ => None,
145		}
146	}
147
148	pub fn token(&self) -> Option<&str> {
149		match self {
150			Namespace::Remote {
151				token,
152				..
153			} => token.as_deref(),
154			_ => None,
155		}
156	}
157
158	pub fn is_remote(&self) -> bool {
159		matches!(self, Namespace::Remote { .. })
160	}
161
162	pub fn system() -> Self {
163		Self::Local {
164			id: NamespaceId::SYSTEM,
165			name: "system".to_string(),
166			local_name: "system".to_string(),
167			parent_id: NamespaceId::ROOT,
168		}
169	}
170
171	pub fn default_namespace() -> Self {
172		Self::Local {
173			id: NamespaceId::DEFAULT,
174			name: "default".to_string(),
175			local_name: "default".to_string(),
176			parent_id: NamespaceId::ROOT,
177		}
178	}
179}