Skip to main content

unitycatalog_common/models/_gen/
labels.rs

1// @generated — do not edit by hand.
2/// All resource types managed by the service.
3#[allow(clippy::derive_partial_eq_without_eq)]
4#[derive(Clone, Debug, PartialEq)]
5pub enum Resource {
6    Agent(super::agents::v0alpha1::Agent),
7    AgentSkill(super::agent_skills::v0alpha1::AgentSkill),
8    Catalog(super::catalogs::v1::Catalog),
9    Column(super::tables::v1::Column),
10    Credential(super::credentials::v1::Credential),
11    ExternalLocation(super::external_locations::v1::ExternalLocation),
12    Function(super::functions::v1::Function),
13    ModelVersion(super::model_versions::v1::ModelVersion),
14    PolicyInfo(super::policies::v1::PolicyInfo),
15    Provider(super::providers::v1::Provider),
16    Recipient(super::recipients::v1::Recipient),
17    RegisteredModel(super::registered_models::v1::RegisteredModel),
18    Schema(super::schemas::v1::Schema),
19    Share(super::shares::v1::Share),
20    StagingTable(super::staging_tables::v1::StagingTable),
21    Table(super::tables::v1::Table),
22    TagPolicy(super::tags::v1::TagPolicy),
23    Volume(super::volumes::v1::Volume),
24}
25/// Discriminant label for each resource type.
26#[derive(
27    ::strum::AsRefStr,
28    ::strum::Display,
29    ::strum::EnumIter,
30    ::strum::EnumString,
31    ::serde::Serialize,
32    ::serde::Deserialize,
33    Hash,
34    Clone,
35    Copy,
36    Debug,
37    PartialEq,
38    Eq,
39    PartialOrd,
40    Ord,
41)]
42#[strum(serialize_all = "snake_case", ascii_case_insensitive)]
43#[serde(rename_all = "snake_case")]
44#[cfg_attr(feature = "sqlx", derive(::sqlx::Type))]
45#[cfg_attr(
46    feature = "sqlx",
47    sqlx(type_name = "object_label", rename_all = "snake_case")
48)]
49pub enum ObjectLabel {
50    Agent,
51    AgentSkill,
52    Catalog,
53    Column,
54    Credential,
55    ExternalLocation,
56    Function,
57    ModelVersion,
58    PolicyInfo,
59    Provider,
60    Recipient,
61    RegisteredModel,
62    Schema,
63    Share,
64    StagingTable,
65    Table,
66    TagPolicy,
67    Volume,
68}
69impl Resource {
70    /// Return the discriminant label for this resource.
71    pub fn resource_label(&self) -> &ObjectLabel {
72        match self {
73            Resource::Agent(_) => &ObjectLabel::Agent,
74            Resource::AgentSkill(_) => &ObjectLabel::AgentSkill,
75            Resource::Catalog(_) => &ObjectLabel::Catalog,
76            Resource::Column(_) => &ObjectLabel::Column,
77            Resource::Credential(_) => &ObjectLabel::Credential,
78            Resource::ExternalLocation(_) => &ObjectLabel::ExternalLocation,
79            Resource::Function(_) => &ObjectLabel::Function,
80            Resource::ModelVersion(_) => &ObjectLabel::ModelVersion,
81            Resource::PolicyInfo(_) => &ObjectLabel::PolicyInfo,
82            Resource::Provider(_) => &ObjectLabel::Provider,
83            Resource::Recipient(_) => &ObjectLabel::Recipient,
84            Resource::RegisteredModel(_) => &ObjectLabel::RegisteredModel,
85            Resource::Schema(_) => &ObjectLabel::Schema,
86            Resource::Share(_) => &ObjectLabel::Share,
87            Resource::StagingTable(_) => &ObjectLabel::StagingTable,
88            Resource::Table(_) => &ObjectLabel::Table,
89            Resource::TagPolicy(_) => &ObjectLabel::TagPolicy,
90            Resource::Volume(_) => &ObjectLabel::Volume,
91        }
92    }
93}
94impl From<super::agents::v0alpha1::Agent> for Resource {
95    fn from(v: super::agents::v0alpha1::Agent) -> Self {
96        Resource::Agent(v)
97    }
98}
99impl TryFrom<Resource> for super::agents::v0alpha1::Agent {
100    type Error = crate::Error;
101    fn try_from(r: Resource) -> Result<Self, Self::Error> {
102        match r {
103            Resource::Agent(v) => Ok(v),
104            _ => Err(<crate::Error>::generic(concat!(
105                "Resource is not a ",
106                stringify!(Agent)
107            ))),
108        }
109    }
110}
111impl From<super::agent_skills::v0alpha1::AgentSkill> for Resource {
112    fn from(v: super::agent_skills::v0alpha1::AgentSkill) -> Self {
113        Resource::AgentSkill(v)
114    }
115}
116impl TryFrom<Resource> for super::agent_skills::v0alpha1::AgentSkill {
117    type Error = crate::Error;
118    fn try_from(r: Resource) -> Result<Self, Self::Error> {
119        match r {
120            Resource::AgentSkill(v) => Ok(v),
121            _ => Err(<crate::Error>::generic(concat!(
122                "Resource is not a ",
123                stringify!(AgentSkill)
124            ))),
125        }
126    }
127}
128impl From<super::catalogs::v1::Catalog> for Resource {
129    fn from(v: super::catalogs::v1::Catalog) -> Self {
130        Resource::Catalog(v)
131    }
132}
133impl TryFrom<Resource> for super::catalogs::v1::Catalog {
134    type Error = crate::Error;
135    fn try_from(r: Resource) -> Result<Self, Self::Error> {
136        match r {
137            Resource::Catalog(v) => Ok(v),
138            _ => Err(<crate::Error>::generic(concat!(
139                "Resource is not a ",
140                stringify!(Catalog)
141            ))),
142        }
143    }
144}
145impl From<super::tables::v1::Column> for Resource {
146    fn from(v: super::tables::v1::Column) -> Self {
147        Resource::Column(v)
148    }
149}
150impl TryFrom<Resource> for super::tables::v1::Column {
151    type Error = crate::Error;
152    fn try_from(r: Resource) -> Result<Self, Self::Error> {
153        match r {
154            Resource::Column(v) => Ok(v),
155            _ => Err(<crate::Error>::generic(concat!(
156                "Resource is not a ",
157                stringify!(Column)
158            ))),
159        }
160    }
161}
162impl From<super::credentials::v1::Credential> for Resource {
163    fn from(v: super::credentials::v1::Credential) -> Self {
164        Resource::Credential(v)
165    }
166}
167impl TryFrom<Resource> for super::credentials::v1::Credential {
168    type Error = crate::Error;
169    fn try_from(r: Resource) -> Result<Self, Self::Error> {
170        match r {
171            Resource::Credential(v) => Ok(v),
172            _ => Err(<crate::Error>::generic(concat!(
173                "Resource is not a ",
174                stringify!(Credential)
175            ))),
176        }
177    }
178}
179impl From<super::external_locations::v1::ExternalLocation> for Resource {
180    fn from(v: super::external_locations::v1::ExternalLocation) -> Self {
181        Resource::ExternalLocation(v)
182    }
183}
184impl TryFrom<Resource> for super::external_locations::v1::ExternalLocation {
185    type Error = crate::Error;
186    fn try_from(r: Resource) -> Result<Self, Self::Error> {
187        match r {
188            Resource::ExternalLocation(v) => Ok(v),
189            _ => Err(<crate::Error>::generic(concat!(
190                "Resource is not a ",
191                stringify!(ExternalLocation)
192            ))),
193        }
194    }
195}
196impl From<super::functions::v1::Function> for Resource {
197    fn from(v: super::functions::v1::Function) -> Self {
198        Resource::Function(v)
199    }
200}
201impl TryFrom<Resource> for super::functions::v1::Function {
202    type Error = crate::Error;
203    fn try_from(r: Resource) -> Result<Self, Self::Error> {
204        match r {
205            Resource::Function(v) => Ok(v),
206            _ => Err(<crate::Error>::generic(concat!(
207                "Resource is not a ",
208                stringify!(Function)
209            ))),
210        }
211    }
212}
213impl From<super::model_versions::v1::ModelVersion> for Resource {
214    fn from(v: super::model_versions::v1::ModelVersion) -> Self {
215        Resource::ModelVersion(v)
216    }
217}
218impl TryFrom<Resource> for super::model_versions::v1::ModelVersion {
219    type Error = crate::Error;
220    fn try_from(r: Resource) -> Result<Self, Self::Error> {
221        match r {
222            Resource::ModelVersion(v) => Ok(v),
223            _ => Err(<crate::Error>::generic(concat!(
224                "Resource is not a ",
225                stringify!(ModelVersion)
226            ))),
227        }
228    }
229}
230impl From<super::policies::v1::PolicyInfo> for Resource {
231    fn from(v: super::policies::v1::PolicyInfo) -> Self {
232        Resource::PolicyInfo(v)
233    }
234}
235impl TryFrom<Resource> for super::policies::v1::PolicyInfo {
236    type Error = crate::Error;
237    fn try_from(r: Resource) -> Result<Self, Self::Error> {
238        match r {
239            Resource::PolicyInfo(v) => Ok(v),
240            _ => Err(<crate::Error>::generic(concat!(
241                "Resource is not a ",
242                stringify!(PolicyInfo)
243            ))),
244        }
245    }
246}
247impl From<super::providers::v1::Provider> for Resource {
248    fn from(v: super::providers::v1::Provider) -> Self {
249        Resource::Provider(v)
250    }
251}
252impl TryFrom<Resource> for super::providers::v1::Provider {
253    type Error = crate::Error;
254    fn try_from(r: Resource) -> Result<Self, Self::Error> {
255        match r {
256            Resource::Provider(v) => Ok(v),
257            _ => Err(<crate::Error>::generic(concat!(
258                "Resource is not a ",
259                stringify!(Provider)
260            ))),
261        }
262    }
263}
264impl From<super::recipients::v1::Recipient> for Resource {
265    fn from(v: super::recipients::v1::Recipient) -> Self {
266        Resource::Recipient(v)
267    }
268}
269impl TryFrom<Resource> for super::recipients::v1::Recipient {
270    type Error = crate::Error;
271    fn try_from(r: Resource) -> Result<Self, Self::Error> {
272        match r {
273            Resource::Recipient(v) => Ok(v),
274            _ => Err(<crate::Error>::generic(concat!(
275                "Resource is not a ",
276                stringify!(Recipient)
277            ))),
278        }
279    }
280}
281impl From<super::registered_models::v1::RegisteredModel> for Resource {
282    fn from(v: super::registered_models::v1::RegisteredModel) -> Self {
283        Resource::RegisteredModel(v)
284    }
285}
286impl TryFrom<Resource> for super::registered_models::v1::RegisteredModel {
287    type Error = crate::Error;
288    fn try_from(r: Resource) -> Result<Self, Self::Error> {
289        match r {
290            Resource::RegisteredModel(v) => Ok(v),
291            _ => Err(<crate::Error>::generic(concat!(
292                "Resource is not a ",
293                stringify!(RegisteredModel)
294            ))),
295        }
296    }
297}
298impl From<super::schemas::v1::Schema> for Resource {
299    fn from(v: super::schemas::v1::Schema) -> Self {
300        Resource::Schema(v)
301    }
302}
303impl TryFrom<Resource> for super::schemas::v1::Schema {
304    type Error = crate::Error;
305    fn try_from(r: Resource) -> Result<Self, Self::Error> {
306        match r {
307            Resource::Schema(v) => Ok(v),
308            _ => Err(<crate::Error>::generic(concat!(
309                "Resource is not a ",
310                stringify!(Schema)
311            ))),
312        }
313    }
314}
315impl From<super::shares::v1::Share> for Resource {
316    fn from(v: super::shares::v1::Share) -> Self {
317        Resource::Share(v)
318    }
319}
320impl TryFrom<Resource> for super::shares::v1::Share {
321    type Error = crate::Error;
322    fn try_from(r: Resource) -> Result<Self, Self::Error> {
323        match r {
324            Resource::Share(v) => Ok(v),
325            _ => Err(<crate::Error>::generic(concat!(
326                "Resource is not a ",
327                stringify!(Share)
328            ))),
329        }
330    }
331}
332impl From<super::staging_tables::v1::StagingTable> for Resource {
333    fn from(v: super::staging_tables::v1::StagingTable) -> Self {
334        Resource::StagingTable(v)
335    }
336}
337impl TryFrom<Resource> for super::staging_tables::v1::StagingTable {
338    type Error = crate::Error;
339    fn try_from(r: Resource) -> Result<Self, Self::Error> {
340        match r {
341            Resource::StagingTable(v) => Ok(v),
342            _ => Err(<crate::Error>::generic(concat!(
343                "Resource is not a ",
344                stringify!(StagingTable)
345            ))),
346        }
347    }
348}
349impl From<super::tables::v1::Table> for Resource {
350    fn from(v: super::tables::v1::Table) -> Self {
351        Resource::Table(v)
352    }
353}
354impl TryFrom<Resource> for super::tables::v1::Table {
355    type Error = crate::Error;
356    fn try_from(r: Resource) -> Result<Self, Self::Error> {
357        match r {
358            Resource::Table(v) => Ok(v),
359            _ => Err(<crate::Error>::generic(concat!(
360                "Resource is not a ",
361                stringify!(Table)
362            ))),
363        }
364    }
365}
366impl From<super::tags::v1::TagPolicy> for Resource {
367    fn from(v: super::tags::v1::TagPolicy) -> Self {
368        Resource::TagPolicy(v)
369    }
370}
371impl TryFrom<Resource> for super::tags::v1::TagPolicy {
372    type Error = crate::Error;
373    fn try_from(r: Resource) -> Result<Self, Self::Error> {
374        match r {
375            Resource::TagPolicy(v) => Ok(v),
376            _ => Err(<crate::Error>::generic(concat!(
377                "Resource is not a ",
378                stringify!(TagPolicy)
379            ))),
380        }
381    }
382}
383impl From<super::volumes::v1::Volume> for Resource {
384    fn from(v: super::volumes::v1::Volume) -> Self {
385        Resource::Volume(v)
386    }
387}
388impl TryFrom<Resource> for super::volumes::v1::Volume {
389    type Error = crate::Error;
390    fn try_from(r: Resource) -> Result<Self, Self::Error> {
391        match r {
392            Resource::Volume(v) => Ok(v),
393            _ => Err(<crate::Error>::generic(concat!(
394                "Resource is not a ",
395                stringify!(Volume)
396            ))),
397        }
398    }
399}
400#[cfg(feature = "store")]
401use crate::Error;
402#[cfg(feature = "store")]
403use crate::models::object::Object;
404#[cfg(feature = "store")]
405use crate::models::resources::{ResourceExt, ResourceIdent, ResourceName, ResourceRef};
406#[cfg(feature = "store")]
407impl TryFrom<Object> for super::agents::v0alpha1::Agent {
408    type Error = Error;
409    fn try_from(object: Object) -> Result<Self, Self::Error> {
410        let props = object
411            .properties
412            .ok_or_else(|| Error::generic("expected properties"))?;
413        let mut res: super::agents::v0alpha1::Agent = ::serde_json::from_value(props)?;
414        res.agent_id = object.id.hyphenated().to_string();
415        res.full_name = res.qualified_name();
416        Ok(res)
417    }
418}
419#[cfg(feature = "store")]
420impl TryFrom<super::agents::v0alpha1::Agent> for Object {
421    type Error = Error;
422    fn try_from(obj: super::agents::v0alpha1::Agent) -> Result<Self, Self::Error> {
423        let id = ::uuid::Uuid::parse_str(&obj.agent_id).unwrap_or_else(|_| ::uuid::Uuid::nil());
424        let name = obj.resource_name();
425        let mut properties = ::serde_json::to_value(obj)?;
426        if let ::serde_json::Value::Object(ref mut map) = properties {
427            map.remove("full_name");
428        }
429        Ok(Object {
430            id,
431            name,
432            label: ObjectLabel::Agent,
433            properties: Some(properties),
434            version: 0,
435            updated_at: None,
436            created_at: chrono::Utc::now(),
437        })
438    }
439}
440#[cfg(feature = "store")]
441impl ResourceExt for super::agents::v0alpha1::Agent {
442    fn resource_name(&self) -> ResourceName {
443        ResourceName::new([&self.catalog_name, &self.schema_name, &self.name])
444    }
445    fn resource_ref(&self) -> ResourceRef {
446        ::uuid::Uuid::parse_str(&self.agent_id)
447            .ok()
448            .map(ResourceRef::Uuid)
449            .unwrap_or_else(|| ResourceRef::Name(self.resource_name()))
450    }
451    fn resource_ident(&self) -> ResourceIdent {
452        (ObjectLabel::Agent).to_ident(self.resource_ref())
453    }
454}
455#[cfg(feature = "store")]
456impl TryFrom<Object> for super::agent_skills::v0alpha1::AgentSkill {
457    type Error = Error;
458    fn try_from(object: Object) -> Result<Self, Self::Error> {
459        let props = object
460            .properties
461            .ok_or_else(|| Error::generic("expected properties"))?;
462        let mut res: super::agent_skills::v0alpha1::AgentSkill = ::serde_json::from_value(props)?;
463        res.agent_skill_id = object.id.hyphenated().to_string();
464        res.full_name = res.qualified_name();
465        Ok(res)
466    }
467}
468#[cfg(feature = "store")]
469impl TryFrom<super::agent_skills::v0alpha1::AgentSkill> for Object {
470    type Error = Error;
471    fn try_from(obj: super::agent_skills::v0alpha1::AgentSkill) -> Result<Self, Self::Error> {
472        let id =
473            ::uuid::Uuid::parse_str(&obj.agent_skill_id).unwrap_or_else(|_| ::uuid::Uuid::nil());
474        let name = obj.resource_name();
475        let mut properties = ::serde_json::to_value(obj)?;
476        if let ::serde_json::Value::Object(ref mut map) = properties {
477            map.remove("full_name");
478        }
479        Ok(Object {
480            id,
481            name,
482            label: ObjectLabel::AgentSkill,
483            properties: Some(properties),
484            version: 0,
485            updated_at: None,
486            created_at: chrono::Utc::now(),
487        })
488    }
489}
490#[cfg(feature = "store")]
491impl ResourceExt for super::agent_skills::v0alpha1::AgentSkill {
492    fn resource_name(&self) -> ResourceName {
493        ResourceName::new([&self.catalog_name, &self.schema_name, &self.name])
494    }
495    fn resource_ref(&self) -> ResourceRef {
496        ::uuid::Uuid::parse_str(&self.agent_skill_id)
497            .ok()
498            .map(ResourceRef::Uuid)
499            .unwrap_or_else(|| ResourceRef::Name(self.resource_name()))
500    }
501    fn resource_ident(&self) -> ResourceIdent {
502        (ObjectLabel::AgentSkill).to_ident(self.resource_ref())
503    }
504}
505#[cfg(feature = "store")]
506impl TryFrom<Object> for super::catalogs::v1::Catalog {
507    type Error = Error;
508    fn try_from(object: Object) -> Result<Self, Self::Error> {
509        let props = object
510            .properties
511            .ok_or_else(|| Error::generic("expected properties"))?;
512        let mut res: super::catalogs::v1::Catalog = ::serde_json::from_value(props)?;
513        res.id = Some(object.id.hyphenated().to_string());
514        Ok(res)
515    }
516}
517#[cfg(feature = "store")]
518impl TryFrom<super::catalogs::v1::Catalog> for Object {
519    type Error = Error;
520    fn try_from(obj: super::catalogs::v1::Catalog) -> Result<Self, Self::Error> {
521        let id = obj
522            .id
523            .as_ref()
524            .map(|id| ::uuid::Uuid::parse_str(id))
525            .transpose()?
526            .unwrap_or_else(::uuid::Uuid::nil);
527        let name = obj.resource_name();
528        let properties = ::serde_json::to_value(obj)?;
529        Ok(Object {
530            id,
531            name,
532            label: ObjectLabel::Catalog,
533            properties: Some(properties),
534            version: 0,
535            updated_at: None,
536            created_at: chrono::Utc::now(),
537        })
538    }
539}
540#[cfg(feature = "store")]
541impl ResourceExt for super::catalogs::v1::Catalog {
542    fn resource_name(&self) -> ResourceName {
543        ResourceName::new([&self.name])
544    }
545    fn resource_ref(&self) -> ResourceRef {
546        self.id
547            .as_ref()
548            .and_then(|id| ::uuid::Uuid::parse_str(id).ok())
549            .map(ResourceRef::Uuid)
550            .unwrap_or_else(|| ResourceRef::Name(self.resource_name()))
551    }
552    fn resource_ident(&self) -> ResourceIdent {
553        (ObjectLabel::Catalog).to_ident(self.resource_ref())
554    }
555}
556#[cfg(feature = "store")]
557impl TryFrom<Object> for super::tables::v1::Column {
558    type Error = Error;
559    fn try_from(object: Object) -> Result<Self, Self::Error> {
560        let props = object
561            .properties
562            .ok_or_else(|| Error::generic("expected properties"))?;
563        let mut res: super::tables::v1::Column = ::serde_json::from_value(props)?;
564        res.column_id = Some(object.id.hyphenated().to_string());
565        Ok(res)
566    }
567}
568#[cfg(feature = "store")]
569impl TryFrom<super::tables::v1::Column> for Object {
570    type Error = Error;
571    fn try_from(obj: super::tables::v1::Column) -> Result<Self, Self::Error> {
572        let id = obj
573            .column_id
574            .as_ref()
575            .map(|id| ::uuid::Uuid::parse_str(id))
576            .transpose()?
577            .unwrap_or_else(::uuid::Uuid::nil);
578        let name = obj.resource_name();
579        let properties = ::serde_json::to_value(obj)?;
580        Ok(Object {
581            id,
582            name,
583            label: ObjectLabel::Column,
584            properties: Some(properties),
585            version: 0,
586            updated_at: None,
587            created_at: chrono::Utc::now(),
588        })
589    }
590}
591#[cfg(feature = "store")]
592impl ResourceExt for super::tables::v1::Column {
593    fn resource_name(&self) -> ResourceName {
594        ResourceName::new([&self.name])
595    }
596    fn resource_ref(&self) -> ResourceRef {
597        self.column_id
598            .as_ref()
599            .and_then(|id| ::uuid::Uuid::parse_str(id).ok())
600            .map(ResourceRef::Uuid)
601            .unwrap_or_else(|| ResourceRef::Name(self.resource_name()))
602    }
603    fn resource_ident(&self) -> ResourceIdent {
604        (ObjectLabel::Column).to_ident(self.resource_ref())
605    }
606}
607#[cfg(feature = "store")]
608impl TryFrom<Object> for super::credentials::v1::Credential {
609    type Error = Error;
610    fn try_from(object: Object) -> Result<Self, Self::Error> {
611        let props = object
612            .properties
613            .ok_or_else(|| Error::generic("expected properties"))?;
614        let mut res: super::credentials::v1::Credential = ::serde_json::from_value(props)?;
615        res.id = Some(object.id.hyphenated().to_string());
616        res.full_name = res.qualified_name();
617        Ok(res)
618    }
619}
620#[cfg(feature = "store")]
621impl TryFrom<super::credentials::v1::Credential> for Object {
622    type Error = Error;
623    fn try_from(obj: super::credentials::v1::Credential) -> Result<Self, Self::Error> {
624        let id = obj
625            .id
626            .as_ref()
627            .map(|id| ::uuid::Uuid::parse_str(id))
628            .transpose()?
629            .unwrap_or_else(::uuid::Uuid::nil);
630        let name = obj.resource_name();
631        let mut properties = ::serde_json::to_value(obj)?;
632        if let ::serde_json::Value::Object(ref mut map) = properties {
633            map.remove("full_name");
634        }
635        Ok(Object {
636            id,
637            name,
638            label: ObjectLabel::Credential,
639            properties: Some(properties),
640            version: 0,
641            updated_at: None,
642            created_at: chrono::Utc::now(),
643        })
644    }
645}
646#[cfg(feature = "store")]
647impl ResourceExt for super::credentials::v1::Credential {
648    fn resource_name(&self) -> ResourceName {
649        ResourceName::new([&self.name])
650    }
651    fn resource_ref(&self) -> ResourceRef {
652        self.id
653            .as_ref()
654            .and_then(|id| ::uuid::Uuid::parse_str(id).ok())
655            .map(ResourceRef::Uuid)
656            .unwrap_or_else(|| ResourceRef::Name(self.resource_name()))
657    }
658    fn resource_ident(&self) -> ResourceIdent {
659        (ObjectLabel::Credential).to_ident(self.resource_ref())
660    }
661}
662#[cfg(feature = "store")]
663impl TryFrom<Object> for super::external_locations::v1::ExternalLocation {
664    type Error = Error;
665    fn try_from(object: Object) -> Result<Self, Self::Error> {
666        let props = object
667            .properties
668            .ok_or_else(|| Error::generic("expected properties"))?;
669        let mut res: super::external_locations::v1::ExternalLocation =
670            ::serde_json::from_value(props)?;
671        res.external_location_id = Some(object.id.hyphenated().to_string());
672        Ok(res)
673    }
674}
675#[cfg(feature = "store")]
676impl TryFrom<super::external_locations::v1::ExternalLocation> for Object {
677    type Error = Error;
678    fn try_from(obj: super::external_locations::v1::ExternalLocation) -> Result<Self, Self::Error> {
679        let id = obj
680            .external_location_id
681            .as_ref()
682            .map(|id| ::uuid::Uuid::parse_str(id))
683            .transpose()?
684            .unwrap_or_else(::uuid::Uuid::nil);
685        let name = obj.resource_name();
686        let properties = ::serde_json::to_value(obj)?;
687        Ok(Object {
688            id,
689            name,
690            label: ObjectLabel::ExternalLocation,
691            properties: Some(properties),
692            version: 0,
693            updated_at: None,
694            created_at: chrono::Utc::now(),
695        })
696    }
697}
698#[cfg(feature = "store")]
699impl ResourceExt for super::external_locations::v1::ExternalLocation {
700    fn resource_name(&self) -> ResourceName {
701        ResourceName::new([&self.name])
702    }
703    fn resource_ref(&self) -> ResourceRef {
704        self.external_location_id
705            .as_ref()
706            .and_then(|id| ::uuid::Uuid::parse_str(id).ok())
707            .map(ResourceRef::Uuid)
708            .unwrap_or_else(|| ResourceRef::Name(self.resource_name()))
709    }
710    fn resource_ident(&self) -> ResourceIdent {
711        (ObjectLabel::ExternalLocation).to_ident(self.resource_ref())
712    }
713}
714#[cfg(feature = "store")]
715impl TryFrom<Object> for super::functions::v1::Function {
716    type Error = Error;
717    fn try_from(object: Object) -> Result<Self, Self::Error> {
718        let props = object
719            .properties
720            .ok_or_else(|| Error::generic("expected properties"))?;
721        let mut res: super::functions::v1::Function = ::serde_json::from_value(props)?;
722        res.function_id = Some(object.id.hyphenated().to_string());
723        res.full_name = res.qualified_name();
724        Ok(res)
725    }
726}
727#[cfg(feature = "store")]
728impl TryFrom<super::functions::v1::Function> for Object {
729    type Error = Error;
730    fn try_from(obj: super::functions::v1::Function) -> Result<Self, Self::Error> {
731        let id = obj
732            .function_id
733            .as_ref()
734            .map(|id| ::uuid::Uuid::parse_str(id))
735            .transpose()?
736            .unwrap_or_else(::uuid::Uuid::nil);
737        let name = obj.resource_name();
738        let mut properties = ::serde_json::to_value(obj)?;
739        if let ::serde_json::Value::Object(ref mut map) = properties {
740            map.remove("full_name");
741        }
742        Ok(Object {
743            id,
744            name,
745            label: ObjectLabel::Function,
746            properties: Some(properties),
747            version: 0,
748            updated_at: None,
749            created_at: chrono::Utc::now(),
750        })
751    }
752}
753#[cfg(feature = "store")]
754impl ResourceExt for super::functions::v1::Function {
755    fn resource_name(&self) -> ResourceName {
756        ResourceName::new([&self.catalog_name, &self.schema_name, &self.name])
757    }
758    fn resource_ref(&self) -> ResourceRef {
759        self.function_id
760            .as_ref()
761            .and_then(|id| ::uuid::Uuid::parse_str(id).ok())
762            .map(ResourceRef::Uuid)
763            .unwrap_or_else(|| ResourceRef::Name(self.resource_name()))
764    }
765    fn resource_ident(&self) -> ResourceIdent {
766        (ObjectLabel::Function).to_ident(self.resource_ref())
767    }
768}
769#[cfg(feature = "store")]
770impl TryFrom<Object> for super::model_versions::v1::ModelVersion {
771    type Error = Error;
772    fn try_from(object: Object) -> Result<Self, Self::Error> {
773        let props = object
774            .properties
775            .ok_or_else(|| Error::generic("expected properties"))?;
776        let mut res: super::model_versions::v1::ModelVersion = ::serde_json::from_value(props)?;
777        res.id = Some(object.id.hyphenated().to_string());
778        Ok(res)
779    }
780}
781#[cfg(feature = "store")]
782impl TryFrom<super::model_versions::v1::ModelVersion> for Object {
783    type Error = Error;
784    fn try_from(obj: super::model_versions::v1::ModelVersion) -> Result<Self, Self::Error> {
785        let id = obj
786            .id
787            .as_ref()
788            .map(|id| ::uuid::Uuid::parse_str(id))
789            .transpose()?
790            .unwrap_or_else(::uuid::Uuid::nil);
791        let name = obj.resource_name();
792        let properties = ::serde_json::to_value(obj)?;
793        Ok(Object {
794            id,
795            name,
796            label: ObjectLabel::ModelVersion,
797            properties: Some(properties),
798            version: 0,
799            updated_at: None,
800            created_at: chrono::Utc::now(),
801        })
802    }
803}
804#[cfg(feature = "store")]
805impl ResourceExt for super::model_versions::v1::ModelVersion {
806    fn resource_name(&self) -> ResourceName {
807        ResourceName::new([
808            &self.catalog_name,
809            &self.schema_name,
810            &self.model_name,
811            &self.version.to_string(),
812        ])
813    }
814    fn resource_ref(&self) -> ResourceRef {
815        self.id
816            .as_ref()
817            .and_then(|id| ::uuid::Uuid::parse_str(id).ok())
818            .map(ResourceRef::Uuid)
819            .unwrap_or_else(|| ResourceRef::Name(self.resource_name()))
820    }
821    fn resource_ident(&self) -> ResourceIdent {
822        (ObjectLabel::ModelVersion).to_ident(self.resource_ref())
823    }
824}
825#[cfg(feature = "store")]
826impl TryFrom<Object> for super::policies::v1::PolicyInfo {
827    type Error = Error;
828    fn try_from(object: Object) -> Result<Self, Self::Error> {
829        let props = object
830            .properties
831            .ok_or_else(|| Error::generic("expected properties"))?;
832        let mut res: super::policies::v1::PolicyInfo = ::serde_json::from_value(props)?;
833        res.id = Some(object.id.hyphenated().to_string());
834        Ok(res)
835    }
836}
837#[cfg(feature = "store")]
838impl TryFrom<super::policies::v1::PolicyInfo> for Object {
839    type Error = Error;
840    fn try_from(obj: super::policies::v1::PolicyInfo) -> Result<Self, Self::Error> {
841        let id = obj
842            .id
843            .as_ref()
844            .map(|id| ::uuid::Uuid::parse_str(id))
845            .transpose()?
846            .unwrap_or_else(::uuid::Uuid::nil);
847        let name = obj.resource_name();
848        let properties = ::serde_json::to_value(obj)?;
849        Ok(Object {
850            id,
851            name,
852            label: ObjectLabel::PolicyInfo,
853            properties: Some(properties),
854            version: 0,
855            updated_at: None,
856            created_at: chrono::Utc::now(),
857        })
858    }
859}
860#[cfg(feature = "store")]
861impl ResourceExt for super::policies::v1::PolicyInfo {
862    fn resource_name(&self) -> ResourceName {
863        ResourceName::new([&self.name])
864    }
865    fn resource_ref(&self) -> ResourceRef {
866        self.id
867            .as_ref()
868            .and_then(|id| ::uuid::Uuid::parse_str(id).ok())
869            .map(ResourceRef::Uuid)
870            .unwrap_or_else(|| ResourceRef::Name(self.resource_name()))
871    }
872    fn resource_ident(&self) -> ResourceIdent {
873        (ObjectLabel::PolicyInfo).to_ident(self.resource_ref())
874    }
875}
876#[cfg(feature = "store")]
877impl TryFrom<Object> for super::providers::v1::Provider {
878    type Error = Error;
879    fn try_from(object: Object) -> Result<Self, Self::Error> {
880        let props = object
881            .properties
882            .ok_or_else(|| Error::generic("expected properties"))?;
883        let mut res: super::providers::v1::Provider = ::serde_json::from_value(props)?;
884        res.id = Some(object.id.hyphenated().to_string());
885        Ok(res)
886    }
887}
888#[cfg(feature = "store")]
889impl TryFrom<super::providers::v1::Provider> for Object {
890    type Error = Error;
891    fn try_from(obj: super::providers::v1::Provider) -> Result<Self, Self::Error> {
892        let id = obj
893            .id
894            .as_ref()
895            .map(|id| ::uuid::Uuid::parse_str(id))
896            .transpose()?
897            .unwrap_or_else(::uuid::Uuid::nil);
898        let name = obj.resource_name();
899        let properties = ::serde_json::to_value(obj)?;
900        Ok(Object {
901            id,
902            name,
903            label: ObjectLabel::Provider,
904            properties: Some(properties),
905            version: 0,
906            updated_at: None,
907            created_at: chrono::Utc::now(),
908        })
909    }
910}
911#[cfg(feature = "store")]
912impl ResourceExt for super::providers::v1::Provider {
913    fn resource_name(&self) -> ResourceName {
914        ResourceName::new([&self.name])
915    }
916    fn resource_ref(&self) -> ResourceRef {
917        self.id
918            .as_ref()
919            .and_then(|id| ::uuid::Uuid::parse_str(id).ok())
920            .map(ResourceRef::Uuid)
921            .unwrap_or_else(|| ResourceRef::Name(self.resource_name()))
922    }
923    fn resource_ident(&self) -> ResourceIdent {
924        (ObjectLabel::Provider).to_ident(self.resource_ref())
925    }
926}
927#[cfg(feature = "store")]
928impl TryFrom<Object> for super::recipients::v1::Recipient {
929    type Error = Error;
930    fn try_from(object: Object) -> Result<Self, Self::Error> {
931        let props = object
932            .properties
933            .ok_or_else(|| Error::generic("expected properties"))?;
934        let mut res: super::recipients::v1::Recipient = ::serde_json::from_value(props)?;
935        res.id = Some(object.id.hyphenated().to_string());
936        Ok(res)
937    }
938}
939#[cfg(feature = "store")]
940impl TryFrom<super::recipients::v1::Recipient> for Object {
941    type Error = Error;
942    fn try_from(obj: super::recipients::v1::Recipient) -> Result<Self, Self::Error> {
943        let id = obj
944            .id
945            .as_ref()
946            .map(|id| ::uuid::Uuid::parse_str(id))
947            .transpose()?
948            .unwrap_or_else(::uuid::Uuid::nil);
949        let name = obj.resource_name();
950        let properties = ::serde_json::to_value(obj)?;
951        Ok(Object {
952            id,
953            name,
954            label: ObjectLabel::Recipient,
955            properties: Some(properties),
956            version: 0,
957            updated_at: None,
958            created_at: chrono::Utc::now(),
959        })
960    }
961}
962#[cfg(feature = "store")]
963impl ResourceExt for super::recipients::v1::Recipient {
964    fn resource_name(&self) -> ResourceName {
965        ResourceName::new([&self.name])
966    }
967    fn resource_ref(&self) -> ResourceRef {
968        self.id
969            .as_ref()
970            .and_then(|id| ::uuid::Uuid::parse_str(id).ok())
971            .map(ResourceRef::Uuid)
972            .unwrap_or_else(|| ResourceRef::Name(self.resource_name()))
973    }
974    fn resource_ident(&self) -> ResourceIdent {
975        (ObjectLabel::Recipient).to_ident(self.resource_ref())
976    }
977}
978#[cfg(feature = "store")]
979impl TryFrom<Object> for super::registered_models::v1::RegisteredModel {
980    type Error = Error;
981    fn try_from(object: Object) -> Result<Self, Self::Error> {
982        let props = object
983            .properties
984            .ok_or_else(|| Error::generic("expected properties"))?;
985        let mut res: super::registered_models::v1::RegisteredModel =
986            ::serde_json::from_value(props)?;
987        res.id = Some(object.id.hyphenated().to_string());
988        res.full_name = res.qualified_name();
989        Ok(res)
990    }
991}
992#[cfg(feature = "store")]
993impl TryFrom<super::registered_models::v1::RegisteredModel> for Object {
994    type Error = Error;
995    fn try_from(obj: super::registered_models::v1::RegisteredModel) -> Result<Self, Self::Error> {
996        let id = obj
997            .id
998            .as_ref()
999            .map(|id| ::uuid::Uuid::parse_str(id))
1000            .transpose()?
1001            .unwrap_or_else(::uuid::Uuid::nil);
1002        let name = obj.resource_name();
1003        let mut properties = ::serde_json::to_value(obj)?;
1004        if let ::serde_json::Value::Object(ref mut map) = properties {
1005            map.remove("full_name");
1006        }
1007        Ok(Object {
1008            id,
1009            name,
1010            label: ObjectLabel::RegisteredModel,
1011            properties: Some(properties),
1012            version: 0,
1013            updated_at: None,
1014            created_at: chrono::Utc::now(),
1015        })
1016    }
1017}
1018#[cfg(feature = "store")]
1019impl ResourceExt for super::registered_models::v1::RegisteredModel {
1020    fn resource_name(&self) -> ResourceName {
1021        ResourceName::new([&self.catalog_name, &self.schema_name, &self.name])
1022    }
1023    fn resource_ref(&self) -> ResourceRef {
1024        self.id
1025            .as_ref()
1026            .and_then(|id| ::uuid::Uuid::parse_str(id).ok())
1027            .map(ResourceRef::Uuid)
1028            .unwrap_or_else(|| ResourceRef::Name(self.resource_name()))
1029    }
1030    fn resource_ident(&self) -> ResourceIdent {
1031        (ObjectLabel::RegisteredModel).to_ident(self.resource_ref())
1032    }
1033}
1034#[cfg(feature = "store")]
1035impl TryFrom<Object> for super::schemas::v1::Schema {
1036    type Error = Error;
1037    fn try_from(object: Object) -> Result<Self, Self::Error> {
1038        let props = object
1039            .properties
1040            .ok_or_else(|| Error::generic("expected properties"))?;
1041        let mut res: super::schemas::v1::Schema = ::serde_json::from_value(props)?;
1042        res.schema_id = Some(object.id.hyphenated().to_string());
1043        res.full_name = res.qualified_name();
1044        Ok(res)
1045    }
1046}
1047#[cfg(feature = "store")]
1048impl TryFrom<super::schemas::v1::Schema> for Object {
1049    type Error = Error;
1050    fn try_from(obj: super::schemas::v1::Schema) -> Result<Self, Self::Error> {
1051        let id = obj
1052            .schema_id
1053            .as_ref()
1054            .map(|id| ::uuid::Uuid::parse_str(id))
1055            .transpose()?
1056            .unwrap_or_else(::uuid::Uuid::nil);
1057        let name = obj.resource_name();
1058        let mut properties = ::serde_json::to_value(obj)?;
1059        if let ::serde_json::Value::Object(ref mut map) = properties {
1060            map.remove("full_name");
1061        }
1062        Ok(Object {
1063            id,
1064            name,
1065            label: ObjectLabel::Schema,
1066            properties: Some(properties),
1067            version: 0,
1068            updated_at: None,
1069            created_at: chrono::Utc::now(),
1070        })
1071    }
1072}
1073#[cfg(feature = "store")]
1074impl ResourceExt for super::schemas::v1::Schema {
1075    fn resource_name(&self) -> ResourceName {
1076        ResourceName::new([&self.catalog_name, &self.name])
1077    }
1078    fn resource_ref(&self) -> ResourceRef {
1079        self.schema_id
1080            .as_ref()
1081            .and_then(|id| ::uuid::Uuid::parse_str(id).ok())
1082            .map(ResourceRef::Uuid)
1083            .unwrap_or_else(|| ResourceRef::Name(self.resource_name()))
1084    }
1085    fn resource_ident(&self) -> ResourceIdent {
1086        (ObjectLabel::Schema).to_ident(self.resource_ref())
1087    }
1088}
1089#[cfg(feature = "store")]
1090impl TryFrom<Object> for super::shares::v1::Share {
1091    type Error = Error;
1092    fn try_from(object: Object) -> Result<Self, Self::Error> {
1093        let props = object
1094            .properties
1095            .ok_or_else(|| Error::generic("expected properties"))?;
1096        let mut res: super::shares::v1::Share = ::serde_json::from_value(props)?;
1097        res.id = Some(object.id.hyphenated().to_string());
1098        Ok(res)
1099    }
1100}
1101#[cfg(feature = "store")]
1102impl TryFrom<super::shares::v1::Share> for Object {
1103    type Error = Error;
1104    fn try_from(obj: super::shares::v1::Share) -> Result<Self, Self::Error> {
1105        let id = obj
1106            .id
1107            .as_ref()
1108            .map(|id| ::uuid::Uuid::parse_str(id))
1109            .transpose()?
1110            .unwrap_or_else(::uuid::Uuid::nil);
1111        let name = obj.resource_name();
1112        let properties = ::serde_json::to_value(obj)?;
1113        Ok(Object {
1114            id,
1115            name,
1116            label: ObjectLabel::Share,
1117            properties: Some(properties),
1118            version: 0,
1119            updated_at: None,
1120            created_at: chrono::Utc::now(),
1121        })
1122    }
1123}
1124#[cfg(feature = "store")]
1125impl ResourceExt for super::shares::v1::Share {
1126    fn resource_name(&self) -> ResourceName {
1127        ResourceName::new([&self.name])
1128    }
1129    fn resource_ref(&self) -> ResourceRef {
1130        self.id
1131            .as_ref()
1132            .and_then(|id| ::uuid::Uuid::parse_str(id).ok())
1133            .map(ResourceRef::Uuid)
1134            .unwrap_or_else(|| ResourceRef::Name(self.resource_name()))
1135    }
1136    fn resource_ident(&self) -> ResourceIdent {
1137        (ObjectLabel::Share).to_ident(self.resource_ref())
1138    }
1139}
1140#[cfg(feature = "store")]
1141impl TryFrom<Object> for super::staging_tables::v1::StagingTable {
1142    type Error = Error;
1143    fn try_from(object: Object) -> Result<Self, Self::Error> {
1144        let props = object
1145            .properties
1146            .ok_or_else(|| Error::generic("expected properties"))?;
1147        let mut res: super::staging_tables::v1::StagingTable = ::serde_json::from_value(props)?;
1148        res.id = object.id.hyphenated().to_string();
1149        Ok(res)
1150    }
1151}
1152#[cfg(feature = "store")]
1153impl TryFrom<super::staging_tables::v1::StagingTable> for Object {
1154    type Error = Error;
1155    fn try_from(obj: super::staging_tables::v1::StagingTable) -> Result<Self, Self::Error> {
1156        let id = ::uuid::Uuid::parse_str(&obj.id).unwrap_or_else(|_| ::uuid::Uuid::nil());
1157        let name = obj.resource_name();
1158        let properties = ::serde_json::to_value(obj)?;
1159        Ok(Object {
1160            id,
1161            name,
1162            label: ObjectLabel::StagingTable,
1163            properties: Some(properties),
1164            version: 0,
1165            updated_at: None,
1166            created_at: chrono::Utc::now(),
1167        })
1168    }
1169}
1170#[cfg(feature = "store")]
1171impl ResourceExt for super::staging_tables::v1::StagingTable {
1172    fn resource_name(&self) -> ResourceName {
1173        ResourceName::new([&self.name])
1174    }
1175    fn resource_ref(&self) -> ResourceRef {
1176        ::uuid::Uuid::parse_str(&self.id)
1177            .ok()
1178            .map(ResourceRef::Uuid)
1179            .unwrap_or_else(|| ResourceRef::Name(self.resource_name()))
1180    }
1181    fn resource_ident(&self) -> ResourceIdent {
1182        (ObjectLabel::StagingTable).to_ident(self.resource_ref())
1183    }
1184}
1185#[cfg(feature = "store")]
1186impl TryFrom<Object> for super::tables::v1::Table {
1187    type Error = Error;
1188    fn try_from(object: Object) -> Result<Self, Self::Error> {
1189        let props = object
1190            .properties
1191            .ok_or_else(|| Error::generic("expected properties"))?;
1192        let mut res: super::tables::v1::Table = ::serde_json::from_value(props)?;
1193        res.table_id = Some(object.id.hyphenated().to_string());
1194        res.full_name = res.qualified_name();
1195        Ok(res)
1196    }
1197}
1198#[cfg(feature = "store")]
1199impl TryFrom<super::tables::v1::Table> for Object {
1200    type Error = Error;
1201    fn try_from(obj: super::tables::v1::Table) -> Result<Self, Self::Error> {
1202        let id = obj
1203            .table_id
1204            .as_ref()
1205            .map(|id| ::uuid::Uuid::parse_str(id))
1206            .transpose()?
1207            .unwrap_or_else(::uuid::Uuid::nil);
1208        let name = obj.resource_name();
1209        let mut properties = ::serde_json::to_value(obj)?;
1210        if let ::serde_json::Value::Object(ref mut map) = properties {
1211            map.remove("full_name");
1212        }
1213        Ok(Object {
1214            id,
1215            name,
1216            label: ObjectLabel::Table,
1217            properties: Some(properties),
1218            version: 0,
1219            updated_at: None,
1220            created_at: chrono::Utc::now(),
1221        })
1222    }
1223}
1224#[cfg(feature = "store")]
1225impl ResourceExt for super::tables::v1::Table {
1226    fn resource_name(&self) -> ResourceName {
1227        ResourceName::new([&self.catalog_name, &self.schema_name, &self.name])
1228    }
1229    fn resource_ref(&self) -> ResourceRef {
1230        self.table_id
1231            .as_ref()
1232            .and_then(|id| ::uuid::Uuid::parse_str(id).ok())
1233            .map(ResourceRef::Uuid)
1234            .unwrap_or_else(|| ResourceRef::Name(self.resource_name()))
1235    }
1236    fn resource_ident(&self) -> ResourceIdent {
1237        (ObjectLabel::Table).to_ident(self.resource_ref())
1238    }
1239}
1240#[cfg(feature = "store")]
1241impl TryFrom<Object> for super::tags::v1::TagPolicy {
1242    type Error = Error;
1243    fn try_from(object: Object) -> Result<Self, Self::Error> {
1244        let props = object
1245            .properties
1246            .ok_or_else(|| Error::generic("expected properties"))?;
1247        let mut res: super::tags::v1::TagPolicy = ::serde_json::from_value(props)?;
1248        res.id = Some(object.id.hyphenated().to_string());
1249        Ok(res)
1250    }
1251}
1252#[cfg(feature = "store")]
1253impl TryFrom<super::tags::v1::TagPolicy> for Object {
1254    type Error = Error;
1255    fn try_from(obj: super::tags::v1::TagPolicy) -> Result<Self, Self::Error> {
1256        let id = obj
1257            .id
1258            .as_ref()
1259            .map(|id| ::uuid::Uuid::parse_str(id))
1260            .transpose()?
1261            .unwrap_or_else(::uuid::Uuid::nil);
1262        let name = obj.resource_name();
1263        let properties = ::serde_json::to_value(obj)?;
1264        Ok(Object {
1265            id,
1266            name,
1267            label: ObjectLabel::TagPolicy,
1268            properties: Some(properties),
1269            version: 0,
1270            updated_at: None,
1271            created_at: chrono::Utc::now(),
1272        })
1273    }
1274}
1275#[cfg(feature = "store")]
1276impl ResourceExt for super::tags::v1::TagPolicy {
1277    fn resource_name(&self) -> ResourceName {
1278        ResourceName::new([&self.tag_key])
1279    }
1280    fn resource_ref(&self) -> ResourceRef {
1281        self.id
1282            .as_ref()
1283            .and_then(|id| ::uuid::Uuid::parse_str(id).ok())
1284            .map(ResourceRef::Uuid)
1285            .unwrap_or_else(|| ResourceRef::Name(self.resource_name()))
1286    }
1287    fn resource_ident(&self) -> ResourceIdent {
1288        (ObjectLabel::TagPolicy).to_ident(self.resource_ref())
1289    }
1290}
1291#[cfg(feature = "store")]
1292impl TryFrom<Object> for super::volumes::v1::Volume {
1293    type Error = Error;
1294    fn try_from(object: Object) -> Result<Self, Self::Error> {
1295        let props = object
1296            .properties
1297            .ok_or_else(|| Error::generic("expected properties"))?;
1298        let mut res: super::volumes::v1::Volume = ::serde_json::from_value(props)?;
1299        res.volume_id = object.id.hyphenated().to_string();
1300        res.full_name = res.qualified_name();
1301        Ok(res)
1302    }
1303}
1304#[cfg(feature = "store")]
1305impl TryFrom<super::volumes::v1::Volume> for Object {
1306    type Error = Error;
1307    fn try_from(obj: super::volumes::v1::Volume) -> Result<Self, Self::Error> {
1308        let id = ::uuid::Uuid::parse_str(&obj.volume_id).unwrap_or_else(|_| ::uuid::Uuid::nil());
1309        let name = obj.resource_name();
1310        let mut properties = ::serde_json::to_value(obj)?;
1311        if let ::serde_json::Value::Object(ref mut map) = properties {
1312            map.remove("full_name");
1313        }
1314        Ok(Object {
1315            id,
1316            name,
1317            label: ObjectLabel::Volume,
1318            properties: Some(properties),
1319            version: 0,
1320            updated_at: None,
1321            created_at: chrono::Utc::now(),
1322        })
1323    }
1324}
1325#[cfg(feature = "store")]
1326impl ResourceExt for super::volumes::v1::Volume {
1327    fn resource_name(&self) -> ResourceName {
1328        ResourceName::new([&self.catalog_name, &self.schema_name, &self.name])
1329    }
1330    fn resource_ref(&self) -> ResourceRef {
1331        ::uuid::Uuid::parse_str(&self.volume_id)
1332            .ok()
1333            .map(ResourceRef::Uuid)
1334            .unwrap_or_else(|| ResourceRef::Name(self.resource_name()))
1335    }
1336    fn resource_ident(&self) -> ResourceIdent {
1337        (ObjectLabel::Volume).to_ident(self.resource_ref())
1338    }
1339}
1340impl super::agents::v0alpha1::Agent {
1341    /// Returns the fully-qualified dot-separated name computed from component fields.
1342    pub fn qualified_name(&self) -> String {
1343        format!("{}.{}.{}", self.catalog_name, self.schema_name, self.name)
1344    }
1345}
1346impl super::agent_skills::v0alpha1::AgentSkill {
1347    /// Returns the fully-qualified dot-separated name computed from component fields.
1348    pub fn qualified_name(&self) -> String {
1349        format!("{}.{}.{}", self.catalog_name, self.schema_name, self.name)
1350    }
1351}
1352impl super::catalogs::v1::Catalog {
1353    /// Returns the fully-qualified dot-separated name computed from component fields.
1354    pub fn qualified_name(&self) -> String {
1355        self.name.clone()
1356    }
1357}
1358impl super::tables::v1::Column {
1359    /// Returns the fully-qualified dot-separated name computed from component fields.
1360    pub fn qualified_name(&self) -> String {
1361        self.name.clone()
1362    }
1363}
1364impl super::credentials::v1::Credential {
1365    /// Returns the fully-qualified dot-separated name computed from component fields.
1366    pub fn qualified_name(&self) -> String {
1367        self.name.clone()
1368    }
1369}
1370impl super::external_locations::v1::ExternalLocation {
1371    /// Returns the fully-qualified dot-separated name computed from component fields.
1372    pub fn qualified_name(&self) -> String {
1373        self.name.clone()
1374    }
1375}
1376impl super::functions::v1::Function {
1377    /// Returns the fully-qualified dot-separated name computed from component fields.
1378    pub fn qualified_name(&self) -> String {
1379        format!("{}.{}.{}", self.catalog_name, self.schema_name, self.name)
1380    }
1381}
1382impl super::model_versions::v1::ModelVersion {
1383    /// Returns the fully-qualified dot-separated name computed from component fields.
1384    pub fn qualified_name(&self) -> String {
1385        format!(
1386            "{}.{}.{}.{}",
1387            self.catalog_name, self.schema_name, self.model_name, self.version
1388        )
1389    }
1390}
1391impl super::policies::v1::PolicyInfo {
1392    /// Returns the fully-qualified dot-separated name computed from component fields.
1393    pub fn qualified_name(&self) -> String {
1394        self.name.clone()
1395    }
1396}
1397impl super::providers::v1::Provider {
1398    /// Returns the fully-qualified dot-separated name computed from component fields.
1399    pub fn qualified_name(&self) -> String {
1400        self.name.clone()
1401    }
1402}
1403impl super::recipients::v1::Recipient {
1404    /// Returns the fully-qualified dot-separated name computed from component fields.
1405    pub fn qualified_name(&self) -> String {
1406        self.name.clone()
1407    }
1408}
1409impl super::registered_models::v1::RegisteredModel {
1410    /// Returns the fully-qualified dot-separated name computed from component fields.
1411    pub fn qualified_name(&self) -> String {
1412        format!("{}.{}.{}", self.catalog_name, self.schema_name, self.name)
1413    }
1414}
1415impl super::schemas::v1::Schema {
1416    /// Returns the fully-qualified dot-separated name computed from component fields.
1417    pub fn qualified_name(&self) -> String {
1418        format!("{}.{}", self.catalog_name, self.name)
1419    }
1420}
1421impl super::shares::v1::Share {
1422    /// Returns the fully-qualified dot-separated name computed from component fields.
1423    pub fn qualified_name(&self) -> String {
1424        self.name.clone()
1425    }
1426}
1427impl super::staging_tables::v1::StagingTable {
1428    /// Returns the fully-qualified dot-separated name computed from component fields.
1429    pub fn qualified_name(&self) -> String {
1430        self.name.clone()
1431    }
1432}
1433impl super::tables::v1::Table {
1434    /// Returns the fully-qualified dot-separated name computed from component fields.
1435    pub fn qualified_name(&self) -> String {
1436        format!("{}.{}.{}", self.catalog_name, self.schema_name, self.name)
1437    }
1438}
1439impl super::tags::v1::TagPolicy {
1440    /// Returns the fully-qualified dot-separated name computed from component fields.
1441    pub fn qualified_name(&self) -> String {
1442        self.tag_key.clone()
1443    }
1444}
1445impl super::volumes::v1::Volume {
1446    /// Returns the fully-qualified dot-separated name computed from component fields.
1447    pub fn qualified_name(&self) -> String {
1448        format!("{}.{}.{}", self.catalog_name, self.schema_name, self.name)
1449    }
1450}
1451#[cfg(feature = "store")]
1452impl ::olai_store::Label for ObjectLabel {
1453    fn as_str(&self) -> &str {
1454        self.as_ref()
1455    }
1456}
1457#[cfg(feature = "store")]
1458/// Static resource type descriptors derived from proto annotations.
1459///
1460/// Each entry describes a resource type's fields (with roles: data, identifier,
1461/// sensitive, managed), hierarchical name components, and parent relationship.
1462///
1463/// Use `ResourceRegistry::from_static` to build a runtime registry from this data.
1464pub static RESOURCE_DESCRIPTORS: &[::olai_store::ResourceTypeDescriptor<ObjectLabel>] = &[
1465    ::olai_store::ResourceTypeDescriptor {
1466        label: ObjectLabel::Agent,
1467        fields: &[
1468            ::olai_store::ResourceFieldDescriptor {
1469                name: "name",
1470                role: ::olai_store::FieldRole::Data,
1471            },
1472            ::olai_store::ResourceFieldDescriptor {
1473                name: "catalog_name",
1474                role: ::olai_store::FieldRole::Data,
1475            },
1476            ::olai_store::ResourceFieldDescriptor {
1477                name: "schema_name",
1478                role: ::olai_store::FieldRole::Data,
1479            },
1480            ::olai_store::ResourceFieldDescriptor {
1481                name: "full_name",
1482                role: ::olai_store::FieldRole::Data,
1483            },
1484            ::olai_store::ResourceFieldDescriptor {
1485                name: "agent_id",
1486                role: ::olai_store::FieldRole::Identifier,
1487            },
1488            ::olai_store::ResourceFieldDescriptor {
1489                name: "invocation_protocol",
1490                role: ::olai_store::FieldRole::Data,
1491            },
1492            ::olai_store::ResourceFieldDescriptor {
1493                name: "endpoint",
1494                role: ::olai_store::FieldRole::Data,
1495            },
1496            ::olai_store::ResourceFieldDescriptor {
1497                name: "description",
1498                role: ::olai_store::FieldRole::Data,
1499            },
1500            ::olai_store::ResourceFieldDescriptor {
1501                name: "capabilities",
1502                role: ::olai_store::FieldRole::Data,
1503            },
1504            ::olai_store::ResourceFieldDescriptor {
1505                name: "input_schema",
1506                role: ::olai_store::FieldRole::Data,
1507            },
1508            ::olai_store::ResourceFieldDescriptor {
1509                name: "owner",
1510                role: ::olai_store::FieldRole::Data,
1511            },
1512            ::olai_store::ResourceFieldDescriptor {
1513                name: "comment",
1514                role: ::olai_store::FieldRole::Data,
1515            },
1516            ::olai_store::ResourceFieldDescriptor {
1517                name: "created_at",
1518                role: ::olai_store::FieldRole::Managed,
1519            },
1520            ::olai_store::ResourceFieldDescriptor {
1521                name: "created_by",
1522                role: ::olai_store::FieldRole::Managed,
1523            },
1524            ::olai_store::ResourceFieldDescriptor {
1525                name: "updated_at",
1526                role: ::olai_store::FieldRole::Managed,
1527            },
1528            ::olai_store::ResourceFieldDescriptor {
1529                name: "updated_by",
1530                role: ::olai_store::FieldRole::Managed,
1531            },
1532            ::olai_store::ResourceFieldDescriptor {
1533                name: "metastore_id",
1534                role: ::olai_store::FieldRole::Data,
1535            },
1536        ],
1537        path_names: &["catalog_name", "schema_name", "name"],
1538        parent_label: Some(ObjectLabel::Catalog),
1539    },
1540    ::olai_store::ResourceTypeDescriptor {
1541        label: ObjectLabel::AgentSkill,
1542        fields: &[
1543            ::olai_store::ResourceFieldDescriptor {
1544                name: "name",
1545                role: ::olai_store::FieldRole::Data,
1546            },
1547            ::olai_store::ResourceFieldDescriptor {
1548                name: "catalog_name",
1549                role: ::olai_store::FieldRole::Data,
1550            },
1551            ::olai_store::ResourceFieldDescriptor {
1552                name: "schema_name",
1553                role: ::olai_store::FieldRole::Data,
1554            },
1555            ::olai_store::ResourceFieldDescriptor {
1556                name: "full_name",
1557                role: ::olai_store::FieldRole::Data,
1558            },
1559            ::olai_store::ResourceFieldDescriptor {
1560                name: "storage_location",
1561                role: ::olai_store::FieldRole::Data,
1562            },
1563            ::olai_store::ResourceFieldDescriptor {
1564                name: "agent_skill_id",
1565                role: ::olai_store::FieldRole::Identifier,
1566            },
1567            ::olai_store::ResourceFieldDescriptor {
1568                name: "agent_skill_type",
1569                role: ::olai_store::FieldRole::Data,
1570            },
1571            ::olai_store::ResourceFieldDescriptor {
1572                name: "description",
1573                role: ::olai_store::FieldRole::Data,
1574            },
1575            ::olai_store::ResourceFieldDescriptor {
1576                name: "license",
1577                role: ::olai_store::FieldRole::Data,
1578            },
1579            ::olai_store::ResourceFieldDescriptor {
1580                name: "allowed_tools",
1581                role: ::olai_store::FieldRole::Data,
1582            },
1583            ::olai_store::ResourceFieldDescriptor {
1584                name: "metadata",
1585                role: ::olai_store::FieldRole::Data,
1586            },
1587            ::olai_store::ResourceFieldDescriptor {
1588                name: "owner",
1589                role: ::olai_store::FieldRole::Data,
1590            },
1591            ::olai_store::ResourceFieldDescriptor {
1592                name: "comment",
1593                role: ::olai_store::FieldRole::Data,
1594            },
1595            ::olai_store::ResourceFieldDescriptor {
1596                name: "created_at",
1597                role: ::olai_store::FieldRole::Managed,
1598            },
1599            ::olai_store::ResourceFieldDescriptor {
1600                name: "created_by",
1601                role: ::olai_store::FieldRole::Managed,
1602            },
1603            ::olai_store::ResourceFieldDescriptor {
1604                name: "updated_at",
1605                role: ::olai_store::FieldRole::Managed,
1606            },
1607            ::olai_store::ResourceFieldDescriptor {
1608                name: "updated_by",
1609                role: ::olai_store::FieldRole::Managed,
1610            },
1611            ::olai_store::ResourceFieldDescriptor {
1612                name: "metastore_id",
1613                role: ::olai_store::FieldRole::Data,
1614            },
1615        ],
1616        path_names: &["catalog_name", "schema_name", "name"],
1617        parent_label: Some(ObjectLabel::Catalog),
1618    },
1619    ::olai_store::ResourceTypeDescriptor {
1620        label: ObjectLabel::Catalog,
1621        fields: &[
1622            ::olai_store::ResourceFieldDescriptor {
1623                name: "name",
1624                role: ::olai_store::FieldRole::Data,
1625            },
1626            ::olai_store::ResourceFieldDescriptor {
1627                name: "id",
1628                role: ::olai_store::FieldRole::Identifier,
1629            },
1630            ::olai_store::ResourceFieldDescriptor {
1631                name: "owner",
1632                role: ::olai_store::FieldRole::Data,
1633            },
1634            ::olai_store::ResourceFieldDescriptor {
1635                name: "comment",
1636                role: ::olai_store::FieldRole::Data,
1637            },
1638            ::olai_store::ResourceFieldDescriptor {
1639                name: "properties",
1640                role: ::olai_store::FieldRole::Data,
1641            },
1642            ::olai_store::ResourceFieldDescriptor {
1643                name: "storage_root",
1644                role: ::olai_store::FieldRole::Data,
1645            },
1646            ::olai_store::ResourceFieldDescriptor {
1647                name: "provider_name",
1648                role: ::olai_store::FieldRole::Data,
1649            },
1650            ::olai_store::ResourceFieldDescriptor {
1651                name: "share_name",
1652                role: ::olai_store::FieldRole::Data,
1653            },
1654            ::olai_store::ResourceFieldDescriptor {
1655                name: "catalog_type",
1656                role: ::olai_store::FieldRole::Data,
1657            },
1658            ::olai_store::ResourceFieldDescriptor {
1659                name: "storage_location",
1660                role: ::olai_store::FieldRole::Data,
1661            },
1662            ::olai_store::ResourceFieldDescriptor {
1663                name: "created_at",
1664                role: ::olai_store::FieldRole::Managed,
1665            },
1666            ::olai_store::ResourceFieldDescriptor {
1667                name: "created_by",
1668                role: ::olai_store::FieldRole::Managed,
1669            },
1670            ::olai_store::ResourceFieldDescriptor {
1671                name: "updated_at",
1672                role: ::olai_store::FieldRole::Managed,
1673            },
1674            ::olai_store::ResourceFieldDescriptor {
1675                name: "updated_by",
1676                role: ::olai_store::FieldRole::Managed,
1677            },
1678            ::olai_store::ResourceFieldDescriptor {
1679                name: "browse_only",
1680                role: ::olai_store::FieldRole::Data,
1681            },
1682        ],
1683        path_names: &["name"],
1684        parent_label: None,
1685    },
1686    ::olai_store::ResourceTypeDescriptor {
1687        label: ObjectLabel::Column,
1688        fields: &[
1689            ::olai_store::ResourceFieldDescriptor {
1690                name: "name",
1691                role: ::olai_store::FieldRole::Data,
1692            },
1693            ::olai_store::ResourceFieldDescriptor {
1694                name: "type_text",
1695                role: ::olai_store::FieldRole::Data,
1696            },
1697            ::olai_store::ResourceFieldDescriptor {
1698                name: "type_json",
1699                role: ::olai_store::FieldRole::Data,
1700            },
1701            ::olai_store::ResourceFieldDescriptor {
1702                name: "position",
1703                role: ::olai_store::FieldRole::Data,
1704            },
1705            ::olai_store::ResourceFieldDescriptor {
1706                name: "type_name",
1707                role: ::olai_store::FieldRole::Data,
1708            },
1709            ::olai_store::ResourceFieldDescriptor {
1710                name: "type_precision",
1711                role: ::olai_store::FieldRole::Data,
1712            },
1713            ::olai_store::ResourceFieldDescriptor {
1714                name: "type_scale",
1715                role: ::olai_store::FieldRole::Data,
1716            },
1717            ::olai_store::ResourceFieldDescriptor {
1718                name: "type_interval_type",
1719                role: ::olai_store::FieldRole::Data,
1720            },
1721            ::olai_store::ResourceFieldDescriptor {
1722                name: "comment",
1723                role: ::olai_store::FieldRole::Data,
1724            },
1725            ::olai_store::ResourceFieldDescriptor {
1726                name: "nullable",
1727                role: ::olai_store::FieldRole::Data,
1728            },
1729            ::olai_store::ResourceFieldDescriptor {
1730                name: "partition_index",
1731                role: ::olai_store::FieldRole::Data,
1732            },
1733            ::olai_store::ResourceFieldDescriptor {
1734                name: "column_id",
1735                role: ::olai_store::FieldRole::Identifier,
1736            },
1737        ],
1738        path_names: &["name"],
1739        parent_label: None,
1740    },
1741    ::olai_store::ResourceTypeDescriptor {
1742        label: ObjectLabel::Credential,
1743        fields: &[
1744            ::olai_store::ResourceFieldDescriptor {
1745                name: "name",
1746                role: ::olai_store::FieldRole::Data,
1747            },
1748            ::olai_store::ResourceFieldDescriptor {
1749                name: "id",
1750                role: ::olai_store::FieldRole::Identifier,
1751            },
1752            ::olai_store::ResourceFieldDescriptor {
1753                name: "purpose",
1754                role: ::olai_store::FieldRole::Data,
1755            },
1756            ::olai_store::ResourceFieldDescriptor {
1757                name: "read_only",
1758                role: ::olai_store::FieldRole::Data,
1759            },
1760            ::olai_store::ResourceFieldDescriptor {
1761                name: "comment",
1762                role: ::olai_store::FieldRole::Data,
1763            },
1764            ::olai_store::ResourceFieldDescriptor {
1765                name: "owner",
1766                role: ::olai_store::FieldRole::Data,
1767            },
1768            ::olai_store::ResourceFieldDescriptor {
1769                name: "created_at",
1770                role: ::olai_store::FieldRole::Managed,
1771            },
1772            ::olai_store::ResourceFieldDescriptor {
1773                name: "created_by",
1774                role: ::olai_store::FieldRole::Managed,
1775            },
1776            ::olai_store::ResourceFieldDescriptor {
1777                name: "updated_at",
1778                role: ::olai_store::FieldRole::Managed,
1779            },
1780            ::olai_store::ResourceFieldDescriptor {
1781                name: "updated_by",
1782                role: ::olai_store::FieldRole::Managed,
1783            },
1784            ::olai_store::ResourceFieldDescriptor {
1785                name: "used_for_managed_storage",
1786                role: ::olai_store::FieldRole::Data,
1787            },
1788            ::olai_store::ResourceFieldDescriptor {
1789                name: "full_name",
1790                role: ::olai_store::FieldRole::Data,
1791            },
1792            ::olai_store::ResourceFieldDescriptor {
1793                name: "azure_service_principal",
1794                role: ::olai_store::FieldRole::Sensitive,
1795            },
1796            ::olai_store::ResourceFieldDescriptor {
1797                name: "azure_managed_identity",
1798                role: ::olai_store::FieldRole::Sensitive,
1799            },
1800            ::olai_store::ResourceFieldDescriptor {
1801                name: "azure_storage_key",
1802                role: ::olai_store::FieldRole::Sensitive,
1803            },
1804            ::olai_store::ResourceFieldDescriptor {
1805                name: "aws_iam_role",
1806                role: ::olai_store::FieldRole::Sensitive,
1807            },
1808            ::olai_store::ResourceFieldDescriptor {
1809                name: "databricks_gcp_service_account",
1810                role: ::olai_store::FieldRole::Sensitive,
1811            },
1812        ],
1813        path_names: &["name"],
1814        parent_label: None,
1815    },
1816    ::olai_store::ResourceTypeDescriptor {
1817        label: ObjectLabel::ExternalLocation,
1818        fields: &[
1819            ::olai_store::ResourceFieldDescriptor {
1820                name: "name",
1821                role: ::olai_store::FieldRole::Data,
1822            },
1823            ::olai_store::ResourceFieldDescriptor {
1824                name: "url",
1825                role: ::olai_store::FieldRole::Data,
1826            },
1827            ::olai_store::ResourceFieldDescriptor {
1828                name: "credential_name",
1829                role: ::olai_store::FieldRole::Data,
1830            },
1831            ::olai_store::ResourceFieldDescriptor {
1832                name: "read_only",
1833                role: ::olai_store::FieldRole::Data,
1834            },
1835            ::olai_store::ResourceFieldDescriptor {
1836                name: "comment",
1837                role: ::olai_store::FieldRole::Data,
1838            },
1839            ::olai_store::ResourceFieldDescriptor {
1840                name: "owner",
1841                role: ::olai_store::FieldRole::Data,
1842            },
1843            ::olai_store::ResourceFieldDescriptor {
1844                name: "credential_id",
1845                role: ::olai_store::FieldRole::Data,
1846            },
1847            ::olai_store::ResourceFieldDescriptor {
1848                name: "created_at",
1849                role: ::olai_store::FieldRole::Managed,
1850            },
1851            ::olai_store::ResourceFieldDescriptor {
1852                name: "created_by",
1853                role: ::olai_store::FieldRole::Managed,
1854            },
1855            ::olai_store::ResourceFieldDescriptor {
1856                name: "updated_at",
1857                role: ::olai_store::FieldRole::Managed,
1858            },
1859            ::olai_store::ResourceFieldDescriptor {
1860                name: "updated_by",
1861                role: ::olai_store::FieldRole::Managed,
1862            },
1863            ::olai_store::ResourceFieldDescriptor {
1864                name: "browse_only",
1865                role: ::olai_store::FieldRole::Data,
1866            },
1867            ::olai_store::ResourceFieldDescriptor {
1868                name: "external_location_id",
1869                role: ::olai_store::FieldRole::Identifier,
1870            },
1871        ],
1872        path_names: &["name"],
1873        parent_label: None,
1874    },
1875    ::olai_store::ResourceTypeDescriptor {
1876        label: ObjectLabel::Function,
1877        fields: &[
1878            ::olai_store::ResourceFieldDescriptor {
1879                name: "name",
1880                role: ::olai_store::FieldRole::Data,
1881            },
1882            ::olai_store::ResourceFieldDescriptor {
1883                name: "catalog_name",
1884                role: ::olai_store::FieldRole::Data,
1885            },
1886            ::olai_store::ResourceFieldDescriptor {
1887                name: "schema_name",
1888                role: ::olai_store::FieldRole::Data,
1889            },
1890            ::olai_store::ResourceFieldDescriptor {
1891                name: "full_name",
1892                role: ::olai_store::FieldRole::Data,
1893            },
1894            ::olai_store::ResourceFieldDescriptor {
1895                name: "data_type",
1896                role: ::olai_store::FieldRole::Data,
1897            },
1898            ::olai_store::ResourceFieldDescriptor {
1899                name: "full_data_type",
1900                role: ::olai_store::FieldRole::Data,
1901            },
1902            ::olai_store::ResourceFieldDescriptor {
1903                name: "input_params",
1904                role: ::olai_store::FieldRole::Data,
1905            },
1906            ::olai_store::ResourceFieldDescriptor {
1907                name: "return_params",
1908                role: ::olai_store::FieldRole::Data,
1909            },
1910            ::olai_store::ResourceFieldDescriptor {
1911                name: "routine_body_language",
1912                role: ::olai_store::FieldRole::Data,
1913            },
1914            ::olai_store::ResourceFieldDescriptor {
1915                name: "routine_definition",
1916                role: ::olai_store::FieldRole::Data,
1917            },
1918            ::olai_store::ResourceFieldDescriptor {
1919                name: "routine_dependencies",
1920                role: ::olai_store::FieldRole::Data,
1921            },
1922            ::olai_store::ResourceFieldDescriptor {
1923                name: "parameter_style",
1924                role: ::olai_store::FieldRole::Data,
1925            },
1926            ::olai_store::ResourceFieldDescriptor {
1927                name: "is_deterministic",
1928                role: ::olai_store::FieldRole::Data,
1929            },
1930            ::olai_store::ResourceFieldDescriptor {
1931                name: "sql_data_access",
1932                role: ::olai_store::FieldRole::Data,
1933            },
1934            ::olai_store::ResourceFieldDescriptor {
1935                name: "is_null_call",
1936                role: ::olai_store::FieldRole::Data,
1937            },
1938            ::olai_store::ResourceFieldDescriptor {
1939                name: "security_type",
1940                role: ::olai_store::FieldRole::Data,
1941            },
1942            ::olai_store::ResourceFieldDescriptor {
1943                name: "specific_name",
1944                role: ::olai_store::FieldRole::Data,
1945            },
1946            ::olai_store::ResourceFieldDescriptor {
1947                name: "routine_body",
1948                role: ::olai_store::FieldRole::Data,
1949            },
1950            ::olai_store::ResourceFieldDescriptor {
1951                name: "comment",
1952                role: ::olai_store::FieldRole::Data,
1953            },
1954            ::olai_store::ResourceFieldDescriptor {
1955                name: "properties",
1956                role: ::olai_store::FieldRole::Data,
1957            },
1958            ::olai_store::ResourceFieldDescriptor {
1959                name: "owner",
1960                role: ::olai_store::FieldRole::Data,
1961            },
1962            ::olai_store::ResourceFieldDescriptor {
1963                name: "function_id",
1964                role: ::olai_store::FieldRole::Identifier,
1965            },
1966            ::olai_store::ResourceFieldDescriptor {
1967                name: "created_at",
1968                role: ::olai_store::FieldRole::Managed,
1969            },
1970            ::olai_store::ResourceFieldDescriptor {
1971                name: "created_by",
1972                role: ::olai_store::FieldRole::Managed,
1973            },
1974            ::olai_store::ResourceFieldDescriptor {
1975                name: "updated_at",
1976                role: ::olai_store::FieldRole::Managed,
1977            },
1978            ::olai_store::ResourceFieldDescriptor {
1979                name: "updated_by",
1980                role: ::olai_store::FieldRole::Managed,
1981            },
1982        ],
1983        path_names: &["catalog_name", "schema_name", "name"],
1984        parent_label: Some(ObjectLabel::Catalog),
1985    },
1986    ::olai_store::ResourceTypeDescriptor {
1987        label: ObjectLabel::ModelVersion,
1988        fields: &[
1989            ::olai_store::ResourceFieldDescriptor {
1990                name: "model_name",
1991                role: ::olai_store::FieldRole::Data,
1992            },
1993            ::olai_store::ResourceFieldDescriptor {
1994                name: "catalog_name",
1995                role: ::olai_store::FieldRole::Data,
1996            },
1997            ::olai_store::ResourceFieldDescriptor {
1998                name: "schema_name",
1999                role: ::olai_store::FieldRole::Data,
2000            },
2001            ::olai_store::ResourceFieldDescriptor {
2002                name: "version",
2003                role: ::olai_store::FieldRole::Data,
2004            },
2005            ::olai_store::ResourceFieldDescriptor {
2006                name: "source",
2007                role: ::olai_store::FieldRole::Data,
2008            },
2009            ::olai_store::ResourceFieldDescriptor {
2010                name: "run_id",
2011                role: ::olai_store::FieldRole::Data,
2012            },
2013            ::olai_store::ResourceFieldDescriptor {
2014                name: "status",
2015                role: ::olai_store::FieldRole::Data,
2016            },
2017            ::olai_store::ResourceFieldDescriptor {
2018                name: "storage_location",
2019                role: ::olai_store::FieldRole::Data,
2020            },
2021            ::olai_store::ResourceFieldDescriptor {
2022                name: "comment",
2023                role: ::olai_store::FieldRole::Data,
2024            },
2025            ::olai_store::ResourceFieldDescriptor {
2026                name: "id",
2027                role: ::olai_store::FieldRole::Identifier,
2028            },
2029            ::olai_store::ResourceFieldDescriptor {
2030                name: "created_at",
2031                role: ::olai_store::FieldRole::Managed,
2032            },
2033            ::olai_store::ResourceFieldDescriptor {
2034                name: "created_by",
2035                role: ::olai_store::FieldRole::Managed,
2036            },
2037            ::olai_store::ResourceFieldDescriptor {
2038                name: "updated_at",
2039                role: ::olai_store::FieldRole::Managed,
2040            },
2041            ::olai_store::ResourceFieldDescriptor {
2042                name: "updated_by",
2043                role: ::olai_store::FieldRole::Managed,
2044            },
2045            ::olai_store::ResourceFieldDescriptor {
2046                name: "metastore_id",
2047                role: ::olai_store::FieldRole::Data,
2048            },
2049            ::olai_store::ResourceFieldDescriptor {
2050                name: "browse_only",
2051                role: ::olai_store::FieldRole::Data,
2052            },
2053        ],
2054        path_names: &["catalog_name", "schema_name", "model_name", "version"],
2055        parent_label: None,
2056    },
2057    ::olai_store::ResourceTypeDescriptor {
2058        label: ObjectLabel::PolicyInfo,
2059        fields: &[
2060            ::olai_store::ResourceFieldDescriptor {
2061                name: "name",
2062                role: ::olai_store::FieldRole::Data,
2063            },
2064            ::olai_store::ResourceFieldDescriptor {
2065                name: "id",
2066                role: ::olai_store::FieldRole::Identifier,
2067            },
2068            ::olai_store::ResourceFieldDescriptor {
2069                name: "on_securable_type",
2070                role: ::olai_store::FieldRole::Data,
2071            },
2072            ::olai_store::ResourceFieldDescriptor {
2073                name: "on_securable_fullname",
2074                role: ::olai_store::FieldRole::Data,
2075            },
2076            ::olai_store::ResourceFieldDescriptor {
2077                name: "policy_type",
2078                role: ::olai_store::FieldRole::Data,
2079            },
2080            ::olai_store::ResourceFieldDescriptor {
2081                name: "to_principals",
2082                role: ::olai_store::FieldRole::Data,
2083            },
2084            ::olai_store::ResourceFieldDescriptor {
2085                name: "except_principals",
2086                role: ::olai_store::FieldRole::Data,
2087            },
2088            ::olai_store::ResourceFieldDescriptor {
2089                name: "when_condition",
2090                role: ::olai_store::FieldRole::Data,
2091            },
2092            ::olai_store::ResourceFieldDescriptor {
2093                name: "match_columns",
2094                role: ::olai_store::FieldRole::Data,
2095            },
2096            ::olai_store::ResourceFieldDescriptor {
2097                name: "comment",
2098                role: ::olai_store::FieldRole::Data,
2099            },
2100            ::olai_store::ResourceFieldDescriptor {
2101                name: "created_at",
2102                role: ::olai_store::FieldRole::Managed,
2103            },
2104            ::olai_store::ResourceFieldDescriptor {
2105                name: "updated_at",
2106                role: ::olai_store::FieldRole::Managed,
2107            },
2108            ::olai_store::ResourceFieldDescriptor {
2109                name: "function",
2110                role: ::olai_store::FieldRole::Data,
2111            },
2112        ],
2113        path_names: &["name"],
2114        parent_label: None,
2115    },
2116    ::olai_store::ResourceTypeDescriptor {
2117        label: ObjectLabel::Provider,
2118        fields: &[
2119            ::olai_store::ResourceFieldDescriptor {
2120                name: "id",
2121                role: ::olai_store::FieldRole::Identifier,
2122            },
2123            ::olai_store::ResourceFieldDescriptor {
2124                name: "name",
2125                role: ::olai_store::FieldRole::Data,
2126            },
2127            ::olai_store::ResourceFieldDescriptor {
2128                name: "authentication_type",
2129                role: ::olai_store::FieldRole::Data,
2130            },
2131            ::olai_store::ResourceFieldDescriptor {
2132                name: "owner",
2133                role: ::olai_store::FieldRole::Data,
2134            },
2135            ::olai_store::ResourceFieldDescriptor {
2136                name: "comment",
2137                role: ::olai_store::FieldRole::Data,
2138            },
2139            ::olai_store::ResourceFieldDescriptor {
2140                name: "recipient_profile_str",
2141                role: ::olai_store::FieldRole::Data,
2142            },
2143            ::olai_store::ResourceFieldDescriptor {
2144                name: "properties",
2145                role: ::olai_store::FieldRole::Data,
2146            },
2147            ::olai_store::ResourceFieldDescriptor {
2148                name: "created_at",
2149                role: ::olai_store::FieldRole::Managed,
2150            },
2151            ::olai_store::ResourceFieldDescriptor {
2152                name: "created_by",
2153                role: ::olai_store::FieldRole::Managed,
2154            },
2155            ::olai_store::ResourceFieldDescriptor {
2156                name: "updated_at",
2157                role: ::olai_store::FieldRole::Managed,
2158            },
2159            ::olai_store::ResourceFieldDescriptor {
2160                name: "updated_by",
2161                role: ::olai_store::FieldRole::Managed,
2162            },
2163        ],
2164        path_names: &["name"],
2165        parent_label: None,
2166    },
2167    ::olai_store::ResourceTypeDescriptor {
2168        label: ObjectLabel::Recipient,
2169        fields: &[
2170            ::olai_store::ResourceFieldDescriptor {
2171                name: "id",
2172                role: ::olai_store::FieldRole::Identifier,
2173            },
2174            ::olai_store::ResourceFieldDescriptor {
2175                name: "name",
2176                role: ::olai_store::FieldRole::Data,
2177            },
2178            ::olai_store::ResourceFieldDescriptor {
2179                name: "authentication_type",
2180                role: ::olai_store::FieldRole::Data,
2181            },
2182            ::olai_store::ResourceFieldDescriptor {
2183                name: "owner",
2184                role: ::olai_store::FieldRole::Data,
2185            },
2186            ::olai_store::ResourceFieldDescriptor {
2187                name: "comment",
2188                role: ::olai_store::FieldRole::Data,
2189            },
2190            ::olai_store::ResourceFieldDescriptor {
2191                name: "properties",
2192                role: ::olai_store::FieldRole::Data,
2193            },
2194            ::olai_store::ResourceFieldDescriptor {
2195                name: "created_at",
2196                role: ::olai_store::FieldRole::Managed,
2197            },
2198            ::olai_store::ResourceFieldDescriptor {
2199                name: "created_by",
2200                role: ::olai_store::FieldRole::Managed,
2201            },
2202            ::olai_store::ResourceFieldDescriptor {
2203                name: "tokens",
2204                role: ::olai_store::FieldRole::Data,
2205            },
2206            ::olai_store::ResourceFieldDescriptor {
2207                name: "updated_at",
2208                role: ::olai_store::FieldRole::Managed,
2209            },
2210            ::olai_store::ResourceFieldDescriptor {
2211                name: "updated_by",
2212                role: ::olai_store::FieldRole::Managed,
2213            },
2214        ],
2215        path_names: &["name"],
2216        parent_label: None,
2217    },
2218    ::olai_store::ResourceTypeDescriptor {
2219        label: ObjectLabel::RegisteredModel,
2220        fields: &[
2221            ::olai_store::ResourceFieldDescriptor {
2222                name: "name",
2223                role: ::olai_store::FieldRole::Data,
2224            },
2225            ::olai_store::ResourceFieldDescriptor {
2226                name: "catalog_name",
2227                role: ::olai_store::FieldRole::Data,
2228            },
2229            ::olai_store::ResourceFieldDescriptor {
2230                name: "schema_name",
2231                role: ::olai_store::FieldRole::Data,
2232            },
2233            ::olai_store::ResourceFieldDescriptor {
2234                name: "full_name",
2235                role: ::olai_store::FieldRole::Data,
2236            },
2237            ::olai_store::ResourceFieldDescriptor {
2238                name: "storage_location",
2239                role: ::olai_store::FieldRole::Data,
2240            },
2241            ::olai_store::ResourceFieldDescriptor {
2242                name: "owner",
2243                role: ::olai_store::FieldRole::Data,
2244            },
2245            ::olai_store::ResourceFieldDescriptor {
2246                name: "comment",
2247                role: ::olai_store::FieldRole::Data,
2248            },
2249            ::olai_store::ResourceFieldDescriptor {
2250                name: "id",
2251                role: ::olai_store::FieldRole::Identifier,
2252            },
2253            ::olai_store::ResourceFieldDescriptor {
2254                name: "created_at",
2255                role: ::olai_store::FieldRole::Managed,
2256            },
2257            ::olai_store::ResourceFieldDescriptor {
2258                name: "created_by",
2259                role: ::olai_store::FieldRole::Managed,
2260            },
2261            ::olai_store::ResourceFieldDescriptor {
2262                name: "updated_at",
2263                role: ::olai_store::FieldRole::Managed,
2264            },
2265            ::olai_store::ResourceFieldDescriptor {
2266                name: "updated_by",
2267                role: ::olai_store::FieldRole::Managed,
2268            },
2269            ::olai_store::ResourceFieldDescriptor {
2270                name: "metastore_id",
2271                role: ::olai_store::FieldRole::Data,
2272            },
2273            ::olai_store::ResourceFieldDescriptor {
2274                name: "browse_only",
2275                role: ::olai_store::FieldRole::Data,
2276            },
2277        ],
2278        path_names: &["catalog_name", "schema_name", "name"],
2279        parent_label: Some(ObjectLabel::Catalog),
2280    },
2281    ::olai_store::ResourceTypeDescriptor {
2282        label: ObjectLabel::Schema,
2283        fields: &[
2284            ::olai_store::ResourceFieldDescriptor {
2285                name: "name",
2286                role: ::olai_store::FieldRole::Data,
2287            },
2288            ::olai_store::ResourceFieldDescriptor {
2289                name: "catalog_name",
2290                role: ::olai_store::FieldRole::Data,
2291            },
2292            ::olai_store::ResourceFieldDescriptor {
2293                name: "full_name",
2294                role: ::olai_store::FieldRole::Data,
2295            },
2296            ::olai_store::ResourceFieldDescriptor {
2297                name: "comment",
2298                role: ::olai_store::FieldRole::Data,
2299            },
2300            ::olai_store::ResourceFieldDescriptor {
2301                name: "properties",
2302                role: ::olai_store::FieldRole::Data,
2303            },
2304            ::olai_store::ResourceFieldDescriptor {
2305                name: "owner",
2306                role: ::olai_store::FieldRole::Data,
2307            },
2308            ::olai_store::ResourceFieldDescriptor {
2309                name: "created_at",
2310                role: ::olai_store::FieldRole::Managed,
2311            },
2312            ::olai_store::ResourceFieldDescriptor {
2313                name: "created_by",
2314                role: ::olai_store::FieldRole::Managed,
2315            },
2316            ::olai_store::ResourceFieldDescriptor {
2317                name: "updated_at",
2318                role: ::olai_store::FieldRole::Managed,
2319            },
2320            ::olai_store::ResourceFieldDescriptor {
2321                name: "updated_by",
2322                role: ::olai_store::FieldRole::Managed,
2323            },
2324            ::olai_store::ResourceFieldDescriptor {
2325                name: "schema_id",
2326                role: ::olai_store::FieldRole::Identifier,
2327            },
2328            ::olai_store::ResourceFieldDescriptor {
2329                name: "storage_root",
2330                role: ::olai_store::FieldRole::Data,
2331            },
2332            ::olai_store::ResourceFieldDescriptor {
2333                name: "storage_location",
2334                role: ::olai_store::FieldRole::Data,
2335            },
2336        ],
2337        path_names: &["catalog_name", "name"],
2338        parent_label: Some(ObjectLabel::Catalog),
2339    },
2340    ::olai_store::ResourceTypeDescriptor {
2341        label: ObjectLabel::Share,
2342        fields: &[
2343            ::olai_store::ResourceFieldDescriptor {
2344                name: "id",
2345                role: ::olai_store::FieldRole::Identifier,
2346            },
2347            ::olai_store::ResourceFieldDescriptor {
2348                name: "name",
2349                role: ::olai_store::FieldRole::Data,
2350            },
2351            ::olai_store::ResourceFieldDescriptor {
2352                name: "objects",
2353                role: ::olai_store::FieldRole::Data,
2354            },
2355            ::olai_store::ResourceFieldDescriptor {
2356                name: "owner",
2357                role: ::olai_store::FieldRole::Data,
2358            },
2359            ::olai_store::ResourceFieldDescriptor {
2360                name: "comment",
2361                role: ::olai_store::FieldRole::Data,
2362            },
2363            ::olai_store::ResourceFieldDescriptor {
2364                name: "storage_location",
2365                role: ::olai_store::FieldRole::Data,
2366            },
2367            ::olai_store::ResourceFieldDescriptor {
2368                name: "storage_root",
2369                role: ::olai_store::FieldRole::Data,
2370            },
2371            ::olai_store::ResourceFieldDescriptor {
2372                name: "created_at",
2373                role: ::olai_store::FieldRole::Managed,
2374            },
2375            ::olai_store::ResourceFieldDescriptor {
2376                name: "created_by",
2377                role: ::olai_store::FieldRole::Managed,
2378            },
2379            ::olai_store::ResourceFieldDescriptor {
2380                name: "updated_at",
2381                role: ::olai_store::FieldRole::Managed,
2382            },
2383            ::olai_store::ResourceFieldDescriptor {
2384                name: "updated_by",
2385                role: ::olai_store::FieldRole::Managed,
2386            },
2387        ],
2388        path_names: &["name"],
2389        parent_label: None,
2390    },
2391    ::olai_store::ResourceTypeDescriptor {
2392        label: ObjectLabel::StagingTable,
2393        fields: &[
2394            ::olai_store::ResourceFieldDescriptor {
2395                name: "id",
2396                role: ::olai_store::FieldRole::Identifier,
2397            },
2398            ::olai_store::ResourceFieldDescriptor {
2399                name: "name",
2400                role: ::olai_store::FieldRole::Data,
2401            },
2402            ::olai_store::ResourceFieldDescriptor {
2403                name: "schema_name",
2404                role: ::olai_store::FieldRole::Data,
2405            },
2406            ::olai_store::ResourceFieldDescriptor {
2407                name: "catalog_name",
2408                role: ::olai_store::FieldRole::Data,
2409            },
2410            ::olai_store::ResourceFieldDescriptor {
2411                name: "staging_location",
2412                role: ::olai_store::FieldRole::Data,
2413            },
2414            ::olai_store::ResourceFieldDescriptor {
2415                name: "created_by",
2416                role: ::olai_store::FieldRole::Managed,
2417            },
2418            ::olai_store::ResourceFieldDescriptor {
2419                name: "stage_committed",
2420                role: ::olai_store::FieldRole::Data,
2421            },
2422            ::olai_store::ResourceFieldDescriptor {
2423                name: "created_at",
2424                role: ::olai_store::FieldRole::Managed,
2425            },
2426        ],
2427        path_names: &["name"],
2428        parent_label: None,
2429    },
2430    ::olai_store::ResourceTypeDescriptor {
2431        label: ObjectLabel::Table,
2432        fields: &[
2433            ::olai_store::ResourceFieldDescriptor {
2434                name: "name",
2435                role: ::olai_store::FieldRole::Data,
2436            },
2437            ::olai_store::ResourceFieldDescriptor {
2438                name: "catalog_name",
2439                role: ::olai_store::FieldRole::Data,
2440            },
2441            ::olai_store::ResourceFieldDescriptor {
2442                name: "schema_name",
2443                role: ::olai_store::FieldRole::Data,
2444            },
2445            ::olai_store::ResourceFieldDescriptor {
2446                name: "table_type",
2447                role: ::olai_store::FieldRole::Data,
2448            },
2449            ::olai_store::ResourceFieldDescriptor {
2450                name: "data_source_format",
2451                role: ::olai_store::FieldRole::Data,
2452            },
2453            ::olai_store::ResourceFieldDescriptor {
2454                name: "columns",
2455                role: ::olai_store::FieldRole::Data,
2456            },
2457            ::olai_store::ResourceFieldDescriptor {
2458                name: "storage_location",
2459                role: ::olai_store::FieldRole::Data,
2460            },
2461            ::olai_store::ResourceFieldDescriptor {
2462                name: "view_definition",
2463                role: ::olai_store::FieldRole::Data,
2464            },
2465            ::olai_store::ResourceFieldDescriptor {
2466                name: "view_dependencies",
2467                role: ::olai_store::FieldRole::Data,
2468            },
2469            ::olai_store::ResourceFieldDescriptor {
2470                name: "owner",
2471                role: ::olai_store::FieldRole::Data,
2472            },
2473            ::olai_store::ResourceFieldDescriptor {
2474                name: "comment",
2475                role: ::olai_store::FieldRole::Data,
2476            },
2477            ::olai_store::ResourceFieldDescriptor {
2478                name: "properties",
2479                role: ::olai_store::FieldRole::Data,
2480            },
2481            ::olai_store::ResourceFieldDescriptor {
2482                name: "storage_credential_name",
2483                role: ::olai_store::FieldRole::Data,
2484            },
2485            ::olai_store::ResourceFieldDescriptor {
2486                name: "full_name",
2487                role: ::olai_store::FieldRole::Data,
2488            },
2489            ::olai_store::ResourceFieldDescriptor {
2490                name: "created_at",
2491                role: ::olai_store::FieldRole::Managed,
2492            },
2493            ::olai_store::ResourceFieldDescriptor {
2494                name: "created_by",
2495                role: ::olai_store::FieldRole::Managed,
2496            },
2497            ::olai_store::ResourceFieldDescriptor {
2498                name: "updated_at",
2499                role: ::olai_store::FieldRole::Managed,
2500            },
2501            ::olai_store::ResourceFieldDescriptor {
2502                name: "updated_by",
2503                role: ::olai_store::FieldRole::Managed,
2504            },
2505            ::olai_store::ResourceFieldDescriptor {
2506                name: "deleted_at",
2507                role: ::olai_store::FieldRole::Data,
2508            },
2509            ::olai_store::ResourceFieldDescriptor {
2510                name: "table_id",
2511                role: ::olai_store::FieldRole::Identifier,
2512            },
2513        ],
2514        path_names: &["catalog_name", "schema_name", "name"],
2515        parent_label: Some(ObjectLabel::Catalog),
2516    },
2517    ::olai_store::ResourceTypeDescriptor {
2518        label: ObjectLabel::TagPolicy,
2519        fields: &[
2520            ::olai_store::ResourceFieldDescriptor {
2521                name: "tag_key",
2522                role: ::olai_store::FieldRole::Data,
2523            },
2524            ::olai_store::ResourceFieldDescriptor {
2525                name: "description",
2526                role: ::olai_store::FieldRole::Data,
2527            },
2528            ::olai_store::ResourceFieldDescriptor {
2529                name: "values",
2530                role: ::olai_store::FieldRole::Data,
2531            },
2532            ::olai_store::ResourceFieldDescriptor {
2533                name: "id",
2534                role: ::olai_store::FieldRole::Identifier,
2535            },
2536            ::olai_store::ResourceFieldDescriptor {
2537                name: "created_at",
2538                role: ::olai_store::FieldRole::Managed,
2539            },
2540            ::olai_store::ResourceFieldDescriptor {
2541                name: "updated_at",
2542                role: ::olai_store::FieldRole::Managed,
2543            },
2544        ],
2545        path_names: &["tag_key"],
2546        parent_label: None,
2547    },
2548    ::olai_store::ResourceTypeDescriptor {
2549        label: ObjectLabel::Volume,
2550        fields: &[
2551            ::olai_store::ResourceFieldDescriptor {
2552                name: "name",
2553                role: ::olai_store::FieldRole::Data,
2554            },
2555            ::olai_store::ResourceFieldDescriptor {
2556                name: "catalog_name",
2557                role: ::olai_store::FieldRole::Data,
2558            },
2559            ::olai_store::ResourceFieldDescriptor {
2560                name: "schema_name",
2561                role: ::olai_store::FieldRole::Data,
2562            },
2563            ::olai_store::ResourceFieldDescriptor {
2564                name: "full_name",
2565                role: ::olai_store::FieldRole::Data,
2566            },
2567            ::olai_store::ResourceFieldDescriptor {
2568                name: "storage_location",
2569                role: ::olai_store::FieldRole::Data,
2570            },
2571            ::olai_store::ResourceFieldDescriptor {
2572                name: "volume_id",
2573                role: ::olai_store::FieldRole::Identifier,
2574            },
2575            ::olai_store::ResourceFieldDescriptor {
2576                name: "volume_type",
2577                role: ::olai_store::FieldRole::Data,
2578            },
2579            ::olai_store::ResourceFieldDescriptor {
2580                name: "owner",
2581                role: ::olai_store::FieldRole::Data,
2582            },
2583            ::olai_store::ResourceFieldDescriptor {
2584                name: "comment",
2585                role: ::olai_store::FieldRole::Data,
2586            },
2587            ::olai_store::ResourceFieldDescriptor {
2588                name: "created_at",
2589                role: ::olai_store::FieldRole::Managed,
2590            },
2591            ::olai_store::ResourceFieldDescriptor {
2592                name: "created_by",
2593                role: ::olai_store::FieldRole::Managed,
2594            },
2595            ::olai_store::ResourceFieldDescriptor {
2596                name: "updated_at",
2597                role: ::olai_store::FieldRole::Managed,
2598            },
2599            ::olai_store::ResourceFieldDescriptor {
2600                name: "updated_by",
2601                role: ::olai_store::FieldRole::Managed,
2602            },
2603            ::olai_store::ResourceFieldDescriptor {
2604                name: "browse_only",
2605                role: ::olai_store::FieldRole::Data,
2606            },
2607            ::olai_store::ResourceFieldDescriptor {
2608                name: "metastore_id",
2609                role: ::olai_store::FieldRole::Data,
2610            },
2611        ],
2612        path_names: &["catalog_name", "schema_name", "name"],
2613        parent_label: Some(ObjectLabel::Catalog),
2614    },
2615];