chiark / gitweb /
config: Move server_name
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 24 Jul 2021 13:57:58 +0000 (14:57 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 24 Jul 2021 13:57:58 +0000 (14:57 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/config.rs

index 491fbe3456b6de327a5ff5b3dfe2ccc32a8661d6..e770a13297d4edab1952e4a9b71633ca1b927556 100644 (file)
@@ -284,8 +284,8 @@ struct ResolveContext<'c> {
   agg: &'c Aggregate,
   link: &'c LinkName,
   end: LinkEnd,
+  server_name: ServerName,
   all_sections: Vec<SectionName>,
-  special_server_section: SectionName,
 }
 
 trait Parseable: Sized {
@@ -386,6 +386,18 @@ impl Aggregate {
     }
     None
   }
+
+  #[throws(AE)]
+  pub fn establish_server_name(&self) -> ServerName {
+    let raw = match self.lookup_raw(
+      "server",
+      [ &SectionName::Common, &SN::special_server_section() ].iter().cloned()
+    ) {
+      Some(raw) => raw.val.as_deref().value()?,
+      None => SPECIAL_SERVER_SECTION,
+    };
+    ServerName(raw.into())
+  }
 }
 
 impl<'c> ResolveContext<'c> {
@@ -466,14 +478,7 @@ impl<'c> ResolveContext<'c> {
 
   #[throws(AE)]
   pub fn special_server(&self, key: &'static str) -> ServerName {
-    let raw = match self.agg.lookup_raw(
-      "server",
-      [ &SectionName::Common, &self.special_server_section ].iter().cloned()
-    ) {
-      Some(raw) => raw.val.as_deref().value()?,
-      None => SPECIAL_SERVER_SECTION,
-    };
-    ServerName(raw.into())
+    self.server_name.clone()
   }
 }
 
@@ -494,6 +499,8 @@ pub fn read() {
     Ok::<_,AE>(agg)
   })().context("read configuration")?;
 
+  let server_name = agg.establish_server_name()?;
+
   let link = LinkName {
     server: "fooxxx".parse().unwrap(),
     client: "127.0.0.1".parse().unwrap(),
@@ -503,6 +510,7 @@ pub fn read() {
     agg: &agg,
     link: &link,
     end: LinkEnd::Server,
+    server_name,
     all_sections: vec![
       SN::Link(link.clone()),
       SN::Client(link.client.clone()),
@@ -511,7 +519,6 @@ pub fn read() {
       SN::ServerLimit(link.server.clone()),
       SN::GlobalLimit,
     ],
-    special_server_section: SN::special_server_section(),
   };
 
   let ic = InstanceConfig::resolve_instance(&rctx)