cloudiful-config 0.5.0

Small serde-based config helpers for default app TOML, env overrides, and atomic saves.
Documentation

cloudiful-config

Small serde-based configuration helpers for the common app case:

  • Read typed config from the platform-default user config directory.
  • Create a missing config.toml from T::default().
  • Apply optional environment variable overrides on top of the file.
  • Save config back atomically as TOML.

For an app named stock, the default file path is:

  • Linux and other XDG platforms: $XDG_CONFIG_HOME/stock/config.toml or ~/.config/stock/config.toml
  • macOS: ~/Library/Application Support/stock/config.toml
  • Windows: %APPDATA%\\stock\\config.toml

Install

[dependencies]
cloudiful-config = "0.5.0"

API

The public API is intentionally small:

  • read(app_name, options)
  • save(app_name, config)
  • ReadOptions

Example:

use cloudiful_config::{ReadOptions, read, save};
use serde::{Deserialize, Serialize};

#[derive(Default, Deserialize, Serialize)]
struct AppConfig {
    port: u16,
    debug: bool,
}

let config: AppConfig = read("stock", None).unwrap();
let config: AppConfig = read("stock", Some(ReadOptions::with_env_prefix("STOCK_"))).unwrap();
save("stock", config).unwrap();

Environment variable rules

  • Pass Some(ReadOptions::with_env_prefix("APP_")) to read(...) when you want env overrides.
  • Keys must start with the configured prefix.
  • The suffix after the prefix is lowercased before matching fields.
  • __ creates nested objects.
  • Values are parsed as JSON literals first.
  • If JSON parsing fails, the raw value is treated as a string.
  • Arrays must be provided as full JSON values such as ["a","b"].
  • Array index syntax is not supported.