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;
5
6impl NamespaceId {
7	pub const ROOT: NamespaceId = NamespaceId(0);
8	pub const SYSTEM: NamespaceId = NamespaceId(1);
9	pub const DEFAULT: NamespaceId = NamespaceId(2);
10	pub const SYSTEM_CONFIG: NamespaceId = NamespaceId(3);
11	pub const SYSTEM_METRICS: NamespaceId = NamespaceId(4);
12	pub const SYSTEM_METRICS_STORAGE: NamespaceId = NamespaceId(5);
13	pub const SYSTEM_METRICS_CDC: NamespaceId = NamespaceId(6);
14	pub const SYSTEM_PROCEDURES: NamespaceId = NamespaceId(7);
15	pub const SYSTEM_BINDINGS: NamespaceId = NamespaceId(8);
16	pub const RQL: NamespaceId = NamespaceId(9);
17	pub const SYSTEM_METRICS_PROFILER: NamespaceId = NamespaceId(10);
18	pub const SYSTEM_METRICS_PROFILER_QUERY: NamespaceId = NamespaceId(11);
19	pub const SYSTEM_METRICS_PROFILER_TXN: NamespaceId = NamespaceId(12);
20	pub const SYSTEM_METRICS_PROFILER_STORAGE: NamespaceId = NamespaceId(13);
21	pub const SYSTEM_METRICS_PROFILER_PLAN: NamespaceId = NamespaceId(14);
22	pub const SYSTEM_METRICS_PROFILER_CDC: NamespaceId = NamespaceId(15);
23	pub const SYSTEM_METRICS_PROFILER_FLOW: NamespaceId = NamespaceId(16);
24	pub const SYSTEM_METRICS_RUNTIME: NamespaceId = NamespaceId(17);
25	pub const SYSTEM_METRICS_RUNTIME_MEMORY: NamespaceId = NamespaceId(18);
26	pub const SYSTEM_METRICS_RUNTIME_WATERMARKS: NamespaceId = NamespaceId(19);
27	pub const SYSTEM_METRICS_PROFILER_SUBSCRIPTION: NamespaceId = NamespaceId(20);
28	pub const SYSTEM_METRICS_PROFILER_SERVER: NamespaceId = NamespaceId(21);
29	pub const SYSTEM_METRICS_PROFILER_WIRE: NamespaceId = NamespaceId(22);
30	pub const SYSTEM_METRICS_PROFILER_AUTH: NamespaceId = NamespaceId(23);
31	pub const SYSTEM_METRICS_PROFILER_CATALOG: NamespaceId = NamespaceId(24);
32	pub const SYSTEM_METRICS_PROFILER_ENGINE: NamespaceId = NamespaceId(25);
33	pub const SYSTEM_METRICS_PROFILER_MUTATE: NamespaceId = NamespaceId(26);
34	pub const SYSTEM_METRICS_PROFILER_TRANSPORT: NamespaceId = NamespaceId(27);
35	pub const SYSTEM_METRICS_PROFILER_TASK: NamespaceId = NamespaceId(28);
36	pub const SYSTEM_METRICS_PROFILER_POLICY: NamespaceId = NamespaceId(29);
37	pub const SYSTEM_METRICS_PROFILER_FFI: NamespaceId = NamespaceId(30);
38	pub const SYSTEM_METRICS_PROFILER_CACHE: NamespaceId = NamespaceId(31);
39	pub const SYSTEM_METRICS_PROFILER_SHAPE: NamespaceId = NamespaceId(32);
40	pub const SYSTEM_METRICS_PROFILER_API: NamespaceId = NamespaceId(33);
41	pub const SYSTEM_METRICS_PROFILER_ACTOR: NamespaceId = NamespaceId(34);
42	pub const SYSTEM_METRICS_STORAGE_TABLE: NamespaceId = NamespaceId(37);
43	pub const SYSTEM_METRICS_STORAGE_VIEW: NamespaceId = NamespaceId(38);
44	pub const SYSTEM_METRICS_STORAGE_TABLE_VIRTUAL: NamespaceId = NamespaceId(39);
45	pub const SYSTEM_METRICS_STORAGE_RINGBUFFER: NamespaceId = NamespaceId(40);
46	pub const SYSTEM_METRICS_STORAGE_DICTIONARY: NamespaceId = NamespaceId(41);
47	pub const SYSTEM_METRICS_STORAGE_SERIES: NamespaceId = NamespaceId(42);
48	pub const SYSTEM_METRICS_STORAGE_FLOW: NamespaceId = NamespaceId(43);
49	pub const SYSTEM_METRICS_STORAGE_FLOW_NODE: NamespaceId = NamespaceId(44);
50	pub const SYSTEM_METRICS_STORAGE_SYSTEM: NamespaceId = NamespaceId(45);
51	pub const SYSTEM_METRICS_CDC_TABLE: NamespaceId = NamespaceId(46);
52	pub const SYSTEM_METRICS_CDC_VIEW: NamespaceId = NamespaceId(47);
53	pub const SYSTEM_METRICS_CDC_TABLE_VIRTUAL: NamespaceId = NamespaceId(48);
54	pub const SYSTEM_METRICS_CDC_RINGBUFFER: NamespaceId = NamespaceId(49);
55	pub const SYSTEM_METRICS_CDC_DICTIONARY: NamespaceId = NamespaceId(50);
56	pub const SYSTEM_METRICS_CDC_SERIES: NamespaceId = NamespaceId(51);
57	pub const SYSTEM_METRICS_CDC_FLOW: NamespaceId = NamespaceId(52);
58	pub const SYSTEM_METRICS_CDC_FLOW_NODE: NamespaceId = NamespaceId(53);
59	pub const SYSTEM_METRICS_CDC_SYSTEM: NamespaceId = NamespaceId(54);
60}
61
62#[derive(Debug, Clone, PartialEq)]
63pub enum Namespace {
64	Local {
65		id: NamespaceId,
66		name: String,
67		local_name: String,
68		parent_id: NamespaceId,
69	},
70	Remote {
71		id: NamespaceId,
72		name: String,
73		local_name: String,
74		parent_id: NamespaceId,
75		address: String,
76		token: Option<String>,
77	},
78}
79
80impl Namespace {
81	pub fn id(&self) -> NamespaceId {
82		match self {
83			Namespace::Local {
84				id,
85				..
86			}
87			| Namespace::Remote {
88				id,
89				..
90			} => *id,
91		}
92	}
93
94	pub fn name(&self) -> &str {
95		match self {
96			Namespace::Local {
97				name,
98				..
99			}
100			| Namespace::Remote {
101				name,
102				..
103			} => name,
104		}
105	}
106
107	pub fn local_name(&self) -> &str {
108		match self {
109			Namespace::Local {
110				local_name,
111				..
112			}
113			| Namespace::Remote {
114				local_name,
115				..
116			} => local_name,
117		}
118	}
119
120	pub fn parent_id(&self) -> NamespaceId {
121		match self {
122			Namespace::Local {
123				parent_id,
124				..
125			}
126			| Namespace::Remote {
127				parent_id,
128				..
129			} => *parent_id,
130		}
131	}
132
133	pub fn address(&self) -> Option<&str> {
134		match self {
135			Namespace::Remote {
136				address,
137				..
138			} => Some(address),
139			_ => None,
140		}
141	}
142
143	pub fn token(&self) -> Option<&str> {
144		match self {
145			Namespace::Remote {
146				token,
147				..
148			} => token.as_deref(),
149			_ => None,
150		}
151	}
152
153	pub fn is_remote(&self) -> bool {
154		matches!(self, Namespace::Remote { .. })
155	}
156
157	pub fn system() -> Self {
158		Self::Local {
159			id: NamespaceId::SYSTEM,
160			name: "system".to_string(),
161			local_name: "system".to_string(),
162			parent_id: NamespaceId::ROOT,
163		}
164	}
165
166	pub fn default_namespace() -> Self {
167		Self::Local {
168			id: NamespaceId::DEFAULT,
169			name: "default".to_string(),
170			local_name: "default".to_string(),
171			parent_id: NamespaceId::ROOT,
172		}
173	}
174}