Macro app_path

Source
macro_rules! app_path {
    ($path:expr) => { ... };
    ($path:expr, env = $env_var:expr) => { ... };
    ($path:expr, override = $override_expr:expr) => { ... };
    ($path:expr, fn = $override_fn:expr) => { ... };
}
Expand description

Convenience macro for creating AppPath instances with optional environment variable overrides.

This macro provides a more ergonomic way to create AppPath instances, especially when dealing with environment variable overrides.

§Syntax

  • app_path!(path) - Simple path creation (equivalent to AppPath::new(path))
  • app_path!(path, env = "VAR_NAME") - With environment variable override
  • app_path!(path, override = expression) - With any optional override expression
  • app_path!(path, fn = function) - With function-based override logic

§Examples

use app_path::{app_path, AppPath};

// Simple usage
let config = app_path!("config.toml");
assert_eq!(config.file_name().unwrap(), "config.toml");

// Environment variable override
let data_dir = app_path!("data", env = "DATA_DIR");

// Custom override expression
let log_file = app_path!("app.log", override = std::env::args().nth(1));

// Function-based override
let config_dir = app_path!("config", fn = || {
    std::env::var("XDG_CONFIG_HOME")
        .or_else(|_| std::env::var("HOME").map(|h| format!("{h}/.config")))
        .ok()
});