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