4 releases
new 0.1.0 | Feb 10, 2025 |
---|---|
0.0.3 |
|
0.0.2 | Dec 8, 2024 |
0.0.1 | Dec 1, 2024 |
0.0.0 | Nov 28, 2024 |
#390 in Configuration
46 downloads per month
Used in scuffle-image-processor
29KB
438 lines
scuffle-settings
[!WARNING]
This crate is under active development and may not be stable.
A crate designed to provide a simple interface to load and manage settings for Scuffle.
Why do we need this?
TODO(troy): Add more details about why we need this.
Status
This crate is currently under development and is not yet stable.
Unit tests are not yet fully implemented. Use at your own risk.
License
This project is licensed under the MIT or Apache-2.0 license. You can choose between one of them if you use this work.
SPDX-License-Identifier: MIT OR Apache-2.0
lib.rs
:
A crate designed to provide a simple interface to load and manage settings.
This crate is a wrapper around the config
crate and clap
crate
to provide a simple interface to load and manage settings.
How to use this
With scuffle_bootstrap
// Define a config struct like this
// You can use all of the serde attributes to customize the deserialization
#[derive(serde::Deserialize)]
struct MyConfig {
some_setting: String,
#[serde(default)]
some_other_setting: i32,
}
// Implement scuffle_boostrap::ConfigParser for the config struct like this
scuffle_settings::bootstrap!(MyConfig);
/// Our global state
struct Global;
impl scuffle_bootstrap::global::Global for Global {
type Config = MyConfig;
async fn init(config: MyConfig) -> anyhow::Result<Arc<Self>> {
// Here you now have access to the config
Ok(Arc::new(Self))
}
}
Without scuffle_bootstrap
// Define a config struct like this
// You can use all of the serde attributes to customize the deserialization
#[derive(serde::Deserialize)]
struct MyConfig {
some_setting: String,
#[serde(default)]
some_other_setting: i32,
}
// Parsing options
let options = scuffle_settings::Options {
env_prefix: Some("MY_APP"),
..Default::default()
};
// Parse the settings
let settings: MyConfig = scuffle_settings::parse_settings(options)?;
See Options
for more information on how to customize parsing.
Templates
If the templates
feature is enabled, the parser will attempt to render
the configuration file as a jinja template before processing it.
All environment variables set during execution will be available under
the env
variable inside the file.
Example TOML file:
some_setting = "${{ env.MY_APP_SECRET }}"
Use ${{
and }}
for variables, {%
and %}
for blocks and {#
and #}
for comments.
Command Line Interface
The following options are available for the CLI:
-
--config
or-c
Path to a configuration file. This option can be used multiple times to load multiple files.
-
--override
or-o
Provide an override for a configuration value, in the format
KEY=VALUE
.
Feature Flags
-
full
: Enables all of the following features -
templates
: Enables template supportSee Templates above.
-
bootstrap
: Enables thebootstrap!
macroSee
bootstrap!
and Withscuffle_bootstrap
above. -
cli
: Enables the CLISee Command Line Interface above.
-
all-formats
: Enables all of the following formats
Format Feature Flags
toml
: Enables TOML supportyaml
: Enables YAML supportjson
: Enables JSON supportjson5
: Enables JSON5 supportron
: Enables RON supportini
: Enables INI support
Status
This crate is currently under development and is not yet stable.
Unit tests are not yet fully implemented. Use at your own risk.
License
This project is licensed under the MIT or Apache-2.0 license. You can choose between one of them if you use this work.
SPDX-License-Identifier: MIT OR Apache-2.0
Dependencies
~1.3–9MB
~90K SLoC