Skip to main content

mint_cli/layout/
mod.rs

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