use crate::{ModelIden, ModelName, ServiceTarget};
#[derive(Debug, Clone)]
pub enum ModelSpec {
Name(ModelName),
Iden(ModelIden),
Target(ServiceTarget),
}
impl ModelSpec {
pub fn from_name(name: impl Into<ModelName>) -> Self {
ModelSpec::Name(name.into())
}
pub fn from_static_name(name: &'static str) -> Self {
let name = ModelName::from_static(name);
ModelSpec::Name(name)
}
pub fn from_iden(model_iden: impl Into<ModelIden>) -> Self {
let model_iden = model_iden.into();
Self::Iden(model_iden)
}
pub fn from_target(target: ServiceTarget) -> Self {
ModelSpec::Target(target)
}
}
impl From<&str> for ModelSpec {
fn from(name: &str) -> Self {
ModelSpec::Name(name.into())
}
}
impl From<&&str> for ModelSpec {
fn from(name: &&str) -> Self {
ModelSpec::Name((*name).into())
}
}
impl From<String> for ModelSpec {
fn from(name: String) -> Self {
ModelSpec::Name(name.into())
}
}
impl From<&String> for ModelSpec {
fn from(name: &String) -> Self {
ModelSpec::Name(name.into())
}
}
impl From<ModelName> for ModelSpec {
fn from(model: ModelName) -> Self {
ModelSpec::Name(model)
}
}
impl From<&ModelName> for ModelSpec {
fn from(model: &ModelName) -> Self {
ModelSpec::Name(model.clone())
}
}
impl From<ModelIden> for ModelSpec {
fn from(model: ModelIden) -> Self {
ModelSpec::Iden(model)
}
}
impl From<&ModelIden> for ModelSpec {
fn from(model: &ModelIden) -> Self {
ModelSpec::Iden(model.clone())
}
}
impl From<ServiceTarget> for ModelSpec {
fn from(target: ServiceTarget) -> Self {
ModelSpec::Target(target)
}
}