reifydb_core/interface/
identifier.rs1use 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}