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.
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,