diff --git a/assets/logo/logo.png b/assets/logo/logo.png new file mode 100644 index 0000000..9256569 Binary files /dev/null and b/assets/logo/logo.png differ diff --git a/assets/logo/logo.svg b/assets/logo/logo.svg new file mode 100644 index 0000000..416a0b7 --- /dev/null +++ b/assets/logo/logo.svg @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + libconfig + diff --git a/readme.md b/readme.md index 8553415..37440ae 100644 --- a/readme.md +++ b/readme.md @@ -1,3 +1,4 @@ +![img](assets/logo/logo.png) # libconfig libconfig is the unified configuration module for SERiF and related projects @@ -21,3 +22,62 @@ meson test -C build this will auto generate a pkg-config file for you so that linking other libraries to libconfig is easy. +## Usage +libconfig makes use of [glaze](https://github.com/stephenberry/glaze?tab=readme-ov-file) to provide compile time reflection +and serialization/deserialization of configuration structs. This allows for config options to be defined in code +and strongly typed. + +```c++ +#include "fourdst/config/config.h" +#include + +struct MyPhysicsOptions { + int gravity = 10; + float friction = 0.5f; + bool enable_wind = false; +}; + +struct MyControlOptions { + double time_step = 0.01; + double max_time = 100.0; +}; + +struct MySimulationConfig { + std::string name = "my_simulation"; + MyPhysicsOptions physics; + MyControlOptions control; +}; + +int main() { + fourdst::config::Config cfg; + + // You can save the default config to a file + cfg.save("default_config.toml"); + + // If you do not provide a name, glaze will use the struct's name + cfg.save(); // saves to MySimulationConfig.toml + + // You can save the json schema for the config + cfg.save_schema("."); // Here you must provide the directory to save to rather than a full file name + + // You can load a config from a file + cfg.load("my_config.toml"); + + // You can accesss the config values + std::println("My Simulation Name: {}, My Simulation Gravity: {}", cfg->name, cfg->physics.gravity); +} +``` + +## Example output TOML +```toml +[main] +name = "my_simulation" +[main.physics] +gravity = 10 +friction = 0.5 +enable_wind = false +[main.control] +time_step = 0.01 +max_time = 100.0 +``` +