use std::borrow::Cow;
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum SchemaReference<'a> {
Bare {
schema: Cow<'a, str>,
},
Full {
schema: Cow<'a, str>,
catalog: Cow<'a, str>,
},
}
impl SchemaReference<'_> {
pub fn schema_name(&self) -> &str {
match self {
SchemaReference::Bare { schema } => schema,
SchemaReference::Full { schema, catalog: _ } => schema,
}
}
}
pub type OwnedSchemaReference = SchemaReference<'static>;
impl std::fmt::Display for SchemaReference<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Bare { schema } => write!(f, "{schema}"),
Self::Full { schema, catalog } => write!(f, "{catalog}.{schema}"),
}
}
}
impl<'a> From<&'a OwnedSchemaReference> for SchemaReference<'a> {
fn from(value: &'a OwnedSchemaReference) -> Self {
match value {
SchemaReference::Bare { schema } => SchemaReference::Bare {
schema: Cow::Borrowed(schema),
},
SchemaReference::Full { schema, catalog } => SchemaReference::Full {
schema: Cow::Borrowed(schema),
catalog: Cow::Borrowed(catalog),
},
}
}
}