# CLI Config A simple library that provides utilities for managing configuration files in command-line applications. ## Installation To use this library in your project, add the following to your `Cargo.toml` file: ```toml [dependencies] cli_config = "0.1" ``` By default this crate supports JSON. However, you can enable support for other file formats by using one or more of the following feature flags: - `toml`: Enables support for TOML files - `yaml`: Enables support for YAML files If you need a custom implementation you can always implement the `File` trait yourself and adapt it to your needs. ```rust use cli_config::fs::File; impl File for MyConfig { // ... } ``` ## Usage Here's an example of how to use this crate in order to manage config files: ```rust use cli_config::{Result, fs::JSONFile}; #[derive(Debug, Serialize, Deserialize)] struct MyConfig { first_run: bool } impl cli_config::fs::JSONFile for MyConfig {} impl Default for MyConfig { fn default() -> Self { MyConfig { first_run: true } } } fn main() -> Result<()> { let config_file = cli_config::init("my_cli_tool", "config.json") .ok_or("Could not locate config file")?; let mut config = MyConfig::load(&config_file)?; if config.first_run { // do your stuff on first run println!("Please login:"); // update the config config.first_run = false; config.write(&config_file)?; } Ok(()) } ``` In this example, we use the `init` function to find the location of a configuration file named `config.json` in a directory called my_cli_tool. If the file doesn't exist, the function will create it and populate it with some default values. We then load the contents of the file into a `MyConfig` struct using the `JSONFile` trait, and check to see if the user has run the program before. ## License This library is distributed under the terms of the MIT license. See [LICENSE](./LICENSE.md) for details