Skip to main content

reifydb_core/interface/
identifier.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2025 ReifyDB
3
4use reifydb_type::fragment::Fragment;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
8pub struct ColumnIdentifier {
9	pub shape: ColumnShape,
10	pub name: Fragment,
11}
12
13impl ColumnIdentifier {
14	pub fn with_shape(namespace: Fragment, shape: Fragment, name: Fragment) -> Self {
15		Self {
16			shape: ColumnShape::Qualified {
17				namespace,
18				name: shape,
19			},
20			name,
21		}
22	}
23
24	pub fn with_alias(alias: Fragment, name: Fragment) -> Self {
25		Self {
26			shape: ColumnShape::Alias(alias),
27			name,
28		}
29	}
30
31	pub fn into_owned(self) -> ColumnIdentifier {
32		ColumnIdentifier {
33			shape: self.shape,
34			name: self.name,
35		}
36	}
37
38	pub fn to_static(&self) -> ColumnIdentifier {
39		ColumnIdentifier {
40			shape: self.shape.clone(),
41			name: Fragment::internal(self.name.text()),
42		}
43	}
44}
45
46#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
47pub enum ColumnShape {
48	Qualified {
49		namespace: Fragment,
50		name: Fragment,
51	},
52
53	Alias(Fragment),
54}
55
56impl ColumnShape {
57	pub fn into_owned(self) -> ColumnShape {
58		match self {
59			ColumnShape::Qualified {
60				namespace,
61				name,
62			} => ColumnShape::Qualified {
63				namespace,
64				name,
65			},
66			ColumnShape::Alias(alias) => ColumnShape::Alias(alias),
67		}
68	}
69
70	pub fn to_static(&self) -> ColumnShape {
71		match self {
72			ColumnShape::Qualified {
73				namespace,
74				name,
75			} => ColumnShape::Qualified {
76				namespace: Fragment::internal(namespace.text()),
77				name: Fragment::internal(name.text()),
78			},
79			ColumnShape::Alias(alias) => ColumnShape::Alias(Fragment::internal(alias.text())),
80		}
81	}
82
83	pub fn as_fragment(&self) -> &Fragment {
84		match self {
85			ColumnShape::Qualified {
86				name,
87				..
88			} => name,
89			ColumnShape::Alias(alias) => alias,
90		}
91	}
92}