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