xref: /aosp_15_r20/external/libconfig/contrib/chained/README.md (revision 2e9d491483b805f09ea864149eadd5680efcc72a)
1*2e9d4914SAndroid Build Coastguard Worker# Method Chained libconfig #
2*2e9d4914SAndroid Build Coastguard Worker
3*2e9d4914SAndroid Build Coastguard Worker**Exception free + header only + method chained + config files**
4*2e9d4914SAndroid Build Coastguard Worker
5*2e9d4914SAndroid Build Coastguard WorkerProvides reading the configuration and defining the configuration specification at once.
6*2e9d4914SAndroid Build Coastguard Worker
7*2e9d4914SAndroid Build Coastguard Worker### Features ###
8*2e9d4914SAndroid Build Coastguard Worker
9*2e9d4914SAndroid Build Coastguard Worker * default values
10*2e9d4914SAndroid Build Coastguard Worker * limits (min/max)
11*2e9d4914SAndroid Build Coastguard Worker * mandatory/optional values
12*2e9d4914SAndroid Build Coastguard Worker * help text output for expected config format on specification violation
13*2e9d4914SAndroid Build Coastguard Worker * capturing and outputting expected configuration specification/defaults
14*2e9d4914SAndroid Build Coastguard Worker
15*2e9d4914SAndroid Build Coastguard WorkerWhile it is possible to write a config file with this extension using the configuration specification capturing feature, it is not intended to be used as a full fledged config writer.
16*2e9d4914SAndroid Build Coastguard Worker
17*2e9d4914SAndroid Build Coastguard Worker### Example ###
18*2e9d4914SAndroid Build Coastguard Worker
19*2e9d4914SAndroid Build Coastguard Worker```C++
20*2e9d4914SAndroid Build Coastguard Worker#include <libconfig_chained.h>
21*2e9d4914SAndroid Build Coastguard Worker
22*2e9d4914SAndroid Build Coastguard Workerusing namespace std;
23*2e9d4914SAndroid Build Coastguard Workerusing namespace libconfig;
24*2e9d4914SAndroid Build Coastguard Worker
25*2e9d4914SAndroid Build Coastguard Workerint main(int argc, char **argv)
26*2e9d4914SAndroid Build Coastguard Worker{
27*2e9d4914SAndroid Build Coastguard Worker    Config cfg;
28*2e9d4914SAndroid Build Coastguard Worker    cfg.readFile("example.cfg");
29*2e9d4914SAndroid Build Coastguard Worker    ChainedSetting cs(cfg.getRoot());
30*2e9d4914SAndroid Build Coastguard Worker
31*2e9d4914SAndroid Build Coastguard Worker    string name = cs["name"].defaultValue("<name>").isMandatory();
32*2e9d4914SAndroid Build Coastguard Worker    string abstract = cs["abstract"].defaultValue("<unknown>");
33*2e9d4914SAndroid Build Coastguard Worker    double longitude = cs["longitude"].min(-180.0).max(180.0).isMandatory();
34*2e9d4914SAndroid Build Coastguard Worker    double latitude = cs["latitude"].min(-90.0).max(90.0).isMandatory();
35*2e9d4914SAndroid Build Coastguard Worker
36*2e9d4914SAndroid Build Coastguard Worker    if (cs.isAnyMandatorySettingMissing())
37*2e9d4914SAndroid Build Coastguard Worker    {
38*2e9d4914SAndroid Build Coastguard Worker        cerr << "Cannot proceed until all mandatory settings are set." << endl;
39*2e9d4914SAndroid Build Coastguard Worker    }
40*2e9d4914SAndroid Build Coastguard Worker}
41*2e9d4914SAndroid Build Coastguard Worker```
42*2e9d4914SAndroid Build Coastguard Worker
43*2e9d4914SAndroid Build Coastguard WorkerConsole Output:
44*2e9d4914SAndroid Build Coastguard Worker```sh
45*2e9d4914SAndroid Build Coastguard Worker'longitude' setting is out of valid bounds (max: 180). Value was: 1200.35
46*2e9d4914SAndroid Build Coastguard WorkerMissing 'latitude' setting in configuration file.
47*2e9d4914SAndroid Build Coastguard WorkerCannot proceed until all mandatory settings are set.
48*2e9d4914SAndroid Build Coastguard Worker```
49*2e9d4914SAndroid Build Coastguard Worker
50*2e9d4914SAndroid Build Coastguard Worker---
51*2e9d4914SAndroid Build Coastguard Worker
52*2e9d4914SAndroid Build Coastguard Worker### How to integrate into your project ###
53*2e9d4914SAndroid Build Coastguard Worker
54*2e9d4914SAndroid Build Coastguard Worker 1. Link the libconfig++.[lib/la/a] library as usual (see standard use of libconfig++).
55*2e9d4914SAndroid Build Coastguard Worker * Replace any includes of libconfig.h++ by libconfig_chained.h.
56*2e9d4914SAndroid Build Coastguard Worker * Use method chained candy as displayed above.
57*2e9d4914SAndroid Build Coastguard Worker
58*2e9d4914SAndroid Build Coastguard Worker---
59*2e9d4914SAndroid Build Coastguard Worker
60*2e9d4914SAndroid Build Coastguard WorkerCreate an issue for any questions or suggestions. Alternatively email me at github [at) hemofektik.de