unitycatalog_common/models/resources/
mod.rs1pub use super::_gen::ObjectLabel;
2pub use olai_store::{EMPTY_RESOURCE_NAME, ResourceName, ResourceRef};
3
4pub use name::resource_name;
6
7mod name;
8
9#[derive(Debug, Clone, PartialEq, Eq, Hash)]
11pub enum ResourceIdent {
12 Agent(ResourceRef),
13 AgentSkill(ResourceRef),
14 Share(ResourceRef),
15 Credential(ResourceRef),
16 ExternalLocation(ResourceRef),
17 Catalog(ResourceRef),
18 Schema(ResourceRef),
19 Table(ResourceRef),
20 Recipient(ResourceRef),
21 Provider(ResourceRef),
22 Column(ResourceRef),
23 Volume(ResourceRef),
24 Function(ResourceRef),
25 TagPolicy(ResourceRef),
26 StagingTable(ResourceRef),
27 PolicyInfo(ResourceRef),
28 RegisteredModel(ResourceRef),
29 ModelVersion(ResourceRef),
30}
31
32impl ResourceIdent {
33 pub fn label(&self) -> &ObjectLabel {
34 self.as_ref()
35 }
36
37 pub fn reference(&self) -> &ResourceRef {
38 self.as_ref()
39 }
40
41 pub fn agent(name: impl Into<ResourceRef>) -> Self {
42 Self::Agent(name.into())
43 }
44
45 pub fn agent_skill(name: impl Into<ResourceRef>) -> Self {
46 Self::AgentSkill(name.into())
47 }
48
49 pub fn share(name: impl Into<ResourceRef>) -> Self {
50 Self::Share(name.into())
51 }
52
53 pub fn credential(name: impl Into<ResourceRef>) -> Self {
54 Self::Credential(name.into())
55 }
56
57 pub fn catalog(name: impl Into<ResourceRef>) -> Self {
58 Self::Catalog(name.into())
59 }
60
61 pub fn schema(name: impl Into<ResourceRef>) -> Self {
62 Self::Schema(name.into())
63 }
64
65 pub fn table(name: impl Into<ResourceRef>) -> Self {
66 Self::Table(name.into())
67 }
68
69 pub fn column(name: impl Into<ResourceRef>) -> Self {
70 Self::Column(name.into())
71 }
72
73 pub fn external_location(name: impl Into<ResourceRef>) -> Self {
74 Self::ExternalLocation(name.into())
75 }
76
77 pub fn recipient(name: impl Into<ResourceRef>) -> Self {
78 Self::Recipient(name.into())
79 }
80
81 pub fn provider(name: impl Into<ResourceRef>) -> Self {
82 Self::Provider(name.into())
83 }
84
85 pub fn volume(name: impl Into<ResourceRef>) -> Self {
86 Self::Volume(name.into())
87 }
88
89 pub fn function(name: impl Into<ResourceRef>) -> Self {
90 Self::Function(name.into())
91 }
92
93 pub fn tag_policy(name: impl Into<ResourceRef>) -> Self {
94 Self::TagPolicy(name.into())
95 }
96
97 pub fn staging_table(name: impl Into<ResourceRef>) -> Self {
98 Self::StagingTable(name.into())
99 }
100
101 pub fn policy_info(name: impl Into<ResourceRef>) -> Self {
102 Self::PolicyInfo(name.into())
103 }
104
105 pub fn registered_model(name: impl Into<ResourceRef>) -> Self {
106 Self::RegisteredModel(name.into())
107 }
108
109 pub fn model_version(name: impl Into<ResourceRef>) -> Self {
110 Self::ModelVersion(name.into())
111 }
112}
113
114impl std::fmt::Display for ResourceIdent {
115 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
116 match self {
117 ResourceIdent::Agent(r) => write!(f, "agent:{}", r),
118 ResourceIdent::AgentSkill(r) => write!(f, "agent_skill:{}", r),
119 ResourceIdent::Share(r) => write!(f, "share:{}", r),
120 ResourceIdent::Credential(r) => write!(f, "credential:{}", r),
121 ResourceIdent::ExternalLocation(r) => write!(f, "external_location:{}", r),
122 ResourceIdent::Catalog(r) => write!(f, "catalog:{}", r),
123 ResourceIdent::Schema(r) => write!(f, "schema:{}", r),
124 ResourceIdent::Table(r) => write!(f, "table:{}", r),
125 ResourceIdent::Recipient(r) => write!(f, "recipient:{}", r),
126 ResourceIdent::Provider(r) => write!(f, "provider:{}", r),
127 ResourceIdent::Column(r) => write!(f, "column:{}", r),
128 ResourceIdent::Volume(r) => write!(f, "volume:{}", r),
129 ResourceIdent::Function(r) => write!(f, "function:{}", r),
130 ResourceIdent::TagPolicy(r) => write!(f, "tag_policy:{}", r),
131 ResourceIdent::StagingTable(r) => write!(f, "staging_table:{}", r),
132 ResourceIdent::PolicyInfo(r) => write!(f, "policy_info:{}", r),
133 ResourceIdent::RegisteredModel(r) => write!(f, "registered_model:{}", r),
134 ResourceIdent::ModelVersion(r) => write!(f, "model_version:{}", r),
135 }
136 }
137}
138
139impl AsRef<ResourceRef> for ResourceIdent {
140 fn as_ref(&self) -> &ResourceRef {
141 match self {
142 ResourceIdent::Agent(r) => r,
143 ResourceIdent::AgentSkill(r) => r,
144 ResourceIdent::Share(r) => r,
145 ResourceIdent::Credential(r) => r,
146 ResourceIdent::ExternalLocation(r) => r,
147 ResourceIdent::Catalog(r) => r,
148 ResourceIdent::Schema(r) => r,
149 ResourceIdent::Table(r) => r,
150 ResourceIdent::Recipient(r) => r,
151 ResourceIdent::Provider(r) => r,
152 ResourceIdent::Column(r) => r,
153 ResourceIdent::Volume(r) => r,
154 ResourceIdent::Function(r) => r,
155 ResourceIdent::TagPolicy(r) => r,
156 ResourceIdent::StagingTable(r) => r,
157 ResourceIdent::PolicyInfo(r) => r,
158 ResourceIdent::RegisteredModel(r) => r,
159 ResourceIdent::ModelVersion(r) => r,
160 }
161 }
162}
163
164impl AsRef<ObjectLabel> for ResourceIdent {
165 fn as_ref(&self) -> &ObjectLabel {
166 match self {
167 ResourceIdent::Agent(_) => &ObjectLabel::Agent,
168 ResourceIdent::AgentSkill(_) => &ObjectLabel::AgentSkill,
169 ResourceIdent::Share(_) => &ObjectLabel::Share,
170 ResourceIdent::Credential(_) => &ObjectLabel::Credential,
171 ResourceIdent::ExternalLocation(_) => &ObjectLabel::ExternalLocation,
172 ResourceIdent::Catalog(_) => &ObjectLabel::Catalog,
173 ResourceIdent::Schema(_) => &ObjectLabel::Schema,
174 ResourceIdent::Table(_) => &ObjectLabel::Table,
175 ResourceIdent::Recipient(_) => &ObjectLabel::Recipient,
176 ResourceIdent::Provider(_) => &ObjectLabel::Provider,
177 ResourceIdent::Column(_) => &ObjectLabel::Column,
178 ResourceIdent::Volume(_) => &ObjectLabel::Volume,
179 ResourceIdent::Function(_) => &ObjectLabel::Function,
180 ResourceIdent::TagPolicy(_) => &ObjectLabel::TagPolicy,
181 ResourceIdent::StagingTable(_) => &ObjectLabel::StagingTable,
182 ResourceIdent::PolicyInfo(_) => &ObjectLabel::PolicyInfo,
183 ResourceIdent::RegisteredModel(_) => &ObjectLabel::RegisteredModel,
184 ResourceIdent::ModelVersion(_) => &ObjectLabel::ModelVersion,
185 }
186 }
187}
188
189impl From<ResourceIdent> for ResourceRef {
190 fn from(ident: ResourceIdent) -> Self {
191 match ident {
192 ResourceIdent::Agent(r) => r,
193 ResourceIdent::AgentSkill(r) => r,
194 ResourceIdent::Share(r) => r,
195 ResourceIdent::Credential(r) => r,
196 ResourceIdent::ExternalLocation(r) => r,
197 ResourceIdent::Catalog(r) => r,
198 ResourceIdent::Schema(r) => r,
199 ResourceIdent::Table(r) => r,
200 ResourceIdent::Recipient(r) => r,
201 ResourceIdent::Provider(r) => r,
202 ResourceIdent::Column(r) => r,
203 ResourceIdent::Volume(r) => r,
204 ResourceIdent::Function(r) => r,
205 ResourceIdent::TagPolicy(r) => r,
206 ResourceIdent::StagingTable(r) => r,
207 ResourceIdent::PolicyInfo(r) => r,
208 ResourceIdent::RegisteredModel(r) => r,
209 ResourceIdent::ModelVersion(r) => r,
210 }
211 }
212}
213
214impl From<&ResourceIdent> for ResourceRef {
215 fn from(ident: &ResourceIdent) -> Self {
216 (ident as &dyn AsRef<ResourceRef>).as_ref().clone()
217 }
218}
219
220impl From<&ResourceIdent> for ObjectLabel {
221 fn from(ident: &ResourceIdent) -> Self {
222 *(ident as &dyn AsRef<ObjectLabel>).as_ref()
223 }
224}
225
226impl From<ResourceIdent> for ObjectLabel {
227 fn from(ident: ResourceIdent) -> Self {
228 (&ident).into()
229 }
230}
231
232pub trait ResourceExt {
233 fn resource_name(&self) -> ResourceName;
235
236 fn resource_ref(&self) -> ResourceRef;
243
244 fn resource_ident(&self) -> ResourceIdent;
246}
247
248impl<T: ResourceExt> From<&T> for ResourceIdent {
249 fn from(resource: &T) -> Self {
250 resource.resource_ident()
251 }
252}
253
254impl ObjectLabel {
255 pub fn to_ident(&self, id: impl Into<ResourceRef>) -> ResourceIdent {
256 match self {
257 ObjectLabel::Agent => ResourceIdent::agent(id),
258 ObjectLabel::AgentSkill => ResourceIdent::agent_skill(id),
259 ObjectLabel::Share => ResourceIdent::share(id),
260 ObjectLabel::Credential => ResourceIdent::credential(id),
261 ObjectLabel::Catalog => ResourceIdent::catalog(id),
262 ObjectLabel::Schema => ResourceIdent::schema(id),
263 ObjectLabel::Table => ResourceIdent::table(id),
264 ObjectLabel::ExternalLocation => ResourceIdent::external_location(id),
265 ObjectLabel::Recipient => ResourceIdent::recipient(id),
266 ObjectLabel::Provider => ResourceIdent::provider(id),
267 ObjectLabel::Column => ResourceIdent::column(id),
268 ObjectLabel::Volume => ResourceIdent::volume(id),
269 ObjectLabel::Function => ResourceIdent::function(id),
270 ObjectLabel::TagPolicy => ResourceIdent::tag_policy(id),
271 ObjectLabel::StagingTable => ResourceIdent::staging_table(id),
272 ObjectLabel::PolicyInfo => ResourceIdent::policy_info(id),
273 ObjectLabel::RegisteredModel => ResourceIdent::registered_model(id),
274 ObjectLabel::ModelVersion => ResourceIdent::model_version(id),
275 }
276 }
277}