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