Simplify VeilFile loader API

This commit is contained in:
2026-06-06 13:21:34 +02:00
parent 3813eaabb3
commit e99dc15dd8
+1 -22
View File
@@ -1,5 +1,3 @@
use crate::config::VeilConfig;
use anyhow::{Context, Result as AnyhowResult};
use std::{ use std::{
fs::{File, create_dir_all, read_to_string}, fs::{File, create_dir_all, read_to_string},
io::{Error, ErrorKind, Result, Write}, io::{Error, ErrorKind, Result, Write},
@@ -9,22 +7,7 @@ use std::{
pub struct VeilFile; pub struct VeilFile;
impl VeilFile { impl VeilFile {
/// Load a config from an explicit `path`. pub fn load(debug: bool) -> Option<PathBuf> {
pub fn load(path: &Path) -> AnyhowResult<VeilConfig> {
let content: String = read_to_string(path)
.with_context(|| format!("Cannot read config: {}", path.display()))?;
serde_yaml::from_str(&content).with_context(|| "Failed to parse veil.yaml")
}
/// Find the default configuration file.
///
/// * If `debug` is true → tries `./local-config/veil.yaml`.
/// * Otherwise → looks inside `$XDG_CONFIG_HOME/veil/` (or `$HOME/.config/veil/`).
/// * The three accepted names are: `veil.yaml`, `.veil.yaml`, `veil.yml`.
///
/// Returns `Some(PathBuf)` when a file is found, otherwise `None`.
pub fn find_default(debug: bool) -> Option<PathBuf> {
if debug { if debug {
let debug_path: &Path = Path::new("./local-config/veil.yaml"); let debug_path: &Path = Path::new("./local-config/veil.yaml");
if debug_path.exists() { if debug_path.exists() {
@@ -47,10 +30,6 @@ impl VeilFile {
None None
} }
/// Create a default configuration file based on the bundled example template.
///
/// * `debug` if `true` we use the debug location (`./local-config/veil.yaml`);
/// otherwise we use the XDG config directory (`$XDG_CONFIG_HOME/veil/veil.yaml`).
pub fn init_config(debug: bool) -> Result<()> { pub fn init_config(debug: bool) -> Result<()> {
let dest_dir: PathBuf = if debug { let dest_dir: PathBuf = if debug {
PathBuf::from("./local-config") PathBuf::from("./local-config")