es_fluent_shared/resource/
route.rs1use crate::fluent::FluentDomain;
2use crate::namespace::ResolvedNamespace;
3use crate::registry::StaticFluentDomain;
4
5use super::ModuleResourceSpec;
6
7#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9pub enum ResourceRoute {
10 Base,
12 Namespaced(ResolvedNamespace),
14}
15
16impl ResourceRoute {
17 pub fn from_namespace(namespace: Option<ResolvedNamespace>) -> Self {
19 match namespace {
20 Some(namespace) => Self::Namespaced(namespace),
21 None => Self::Base,
22 }
23 }
24
25 pub fn is_base(&self) -> bool {
27 matches!(self, Self::Base)
28 }
29
30 pub fn resource_spec(&self, domain: &str, required: bool) -> ModuleResourceSpec {
32 let domain =
33 FluentDomain::try_new(domain).expect("resource route domain should be validated");
34 self.resource_spec_for_domain(&domain, required)
35 }
36
37 pub fn resource_spec_for_static_domain(
39 &self,
40 domain: StaticFluentDomain,
41 required: bool,
42 ) -> ModuleResourceSpec {
43 match self {
44 Self::Base => ModuleResourceSpec::base_for_static_domain(domain, required),
45 Self::Namespaced(namespace) => {
46 ModuleResourceSpec::namespaced_for_static_domain(domain, namespace, required)
47 },
48 }
49 }
50
51 fn resource_spec_for_domain(
52 &self,
53 domain: &FluentDomain,
54 required: bool,
55 ) -> ModuleResourceSpec {
56 match self {
57 Self::Base => ModuleResourceSpec::base_for_domain(domain, required),
58 Self::Namespaced(namespace) => {
59 ModuleResourceSpec::namespaced_for_domain(domain, namespace, required)
60 },
61 }
62 }
63}