use crate::fluent::FluentDomain;
use crate::namespace::ResolvedNamespace;
use crate::registry::StaticFluentDomain;
use super::ModuleResourceSpec;
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
pub enum ResourceRoute {
Base,
Namespaced(ResolvedNamespace),
}
impl ResourceRoute {
pub fn from_namespace(namespace: Option<ResolvedNamespace>) -> Self {
match namespace {
Some(namespace) => Self::Namespaced(namespace),
None => Self::Base,
}
}
pub fn is_base(&self) -> bool {
matches!(self, Self::Base)
}
pub fn resource_spec(&self, domain: &str, required: bool) -> ModuleResourceSpec {
let domain =
FluentDomain::try_new(domain).expect("resource route domain should be validated");
self.resource_spec_for_domain(&domain, required)
}
pub fn resource_spec_for_static_domain(
&self,
domain: StaticFluentDomain,
required: bool,
) -> ModuleResourceSpec {
match self {
Self::Base => ModuleResourceSpec::base_for_static_domain(domain, required),
Self::Namespaced(namespace) => {
ModuleResourceSpec::namespaced_for_static_domain(domain, namespace, required)
},
}
}
fn resource_spec_for_domain(
&self,
domain: &FluentDomain,
required: bool,
) -> ModuleResourceSpec {
match self {
Self::Base => ModuleResourceSpec::base_for_domain(domain, required),
Self::Namespaced(namespace) => {
ModuleResourceSpec::namespaced_for_domain(domain, namespace, required)
},
}
}
}