Add Quire::load to encapsulate config reading from base_dir
Quire::load(base_dir) reads config.fnl from the expected location and
constructs a Quire in one step, so callers don't have to pass both
base_dir and config separately. Quire::new(base_dir, config) is kept
for tests that need explicit control.
change
commit 51c42e93bcd2193a009dd92cb2b194e53fc29cbb
author Claude <noreply@anthropic.com>
date
parent 98f58cee
diff --git a/quire-server/src/bin/quire/main.rs b/quire-server/src/bin/quire/main.rs
index 7195400..637e5eb 100644
--- a/quire-server/src/bin/quire/main.rs
+++ b/quire-server/src/bin/quire/main.rs
@@ -5,7 +5,7 @@ use clap::{CommandFactory, Parser, Subcommand};
 use clap_complete::Shell;
 use miette::IntoDiagnostic;
 use miette::Result;
-use quire::{GlobalConfig, Quire};
+use quire::Quire;
 use quire_core::telemetry::{self, FmtMode, MietteLayer};
 
 const VERSION: &str = env!("QUIRE_VERSION");
@@ -109,9 +109,7 @@ enum CiCommands {
 async fn main() -> Result<()> {
     let cli = Cli::parse();
 
-    let base_dir: std::path::PathBuf = cli.base_dir.into();
-    let config = GlobalConfig::load(&base_dir.join("config.fnl"))?;
-    let quire = Quire::new(base_dir, config);
+    let quire = Quire::load(cli.base_dir.into())?;
 
     let miette_layer = MietteLayer::new()
         .with_type::<quire::Error>()
diff --git a/quire-server/src/quire/mod.rs b/quire-server/src/quire/mod.rs
index 25dbf76..600a5db 100644
--- a/quire-server/src/quire/mod.rs
+++ b/quire-server/src/quire/mod.rs
@@ -243,7 +243,16 @@ impl Default for Quire {
 }
 
 impl Quire {
-    /// Create a `Quire` rooted at the given base directory with the given config.
+    /// Load config from `base_dir/config.fnl` and create a `Quire` rooted there.
+    ///
+    /// Returns default config if the file is absent; propagates parse errors.
+    pub fn load(base_dir: PathBuf) -> Result<Self> {
+        let config = GlobalConfig::load(&base_dir.join("config.fnl"))?;
+        Ok(Self::new(base_dir, config))
+    }
+
+    /// Create a `Quire` with an explicit config. Prefer `Quire::load` in production;
+    /// use this in tests that need direct control over config.
     pub fn new(base_dir: PathBuf, config: GlobalConfig) -> Self {
         Self {
             base_dir,