mint_cli/layout/
mod.rs

1pub mod args;
2pub mod block;
3mod conversions;
4mod entry;
5pub mod errors;
6pub mod header;
7pub mod settings;
8pub mod value;
9
10use block::Config;
11use errors::LayoutError;
12use std::path::Path;
13
14pub fn load_layout(filename: &str) -> Result<Config, LayoutError> {
15    let text = std::fs::read_to_string(filename)
16        .map_err(|_| LayoutError::FileError(format!("failed to open file: {}", filename)))?;
17
18    let ext = Path::new(filename)
19        .extension()
20        .and_then(|s| s.to_str())
21        .map(|s| s.to_ascii_lowercase())
22        .unwrap_or_default();
23
24    let cfg: Config = match ext.as_str() {
25        "toml" => toml::from_str(&text).map_err(|e| {
26            LayoutError::FileError(format!("failed to parse file {}: {}", filename, e))
27        })?,
28        "yaml" | "yml" => serde_yaml::from_str(&text).map_err(|e| {
29            LayoutError::FileError(format!("failed to parse file {}: {}", filename, e))
30        })?,
31        "json" => serde_json::from_str(&text).map_err(|e| {
32            LayoutError::FileError(format!("failed to parse file {}: {}", filename, e))
33        })?,
34        _ => {
35            return Err(LayoutError::FileError(
36                "Unsupported file format".to_string(),
37            ));
38        }
39    };
40
41    Ok(cfg)
42}