TOML in c99; v1.0 compliant.
Please see the toml.h
file for details. What follows is a simple example that
parses this config file:
[server]
host = "www.example.com"
port = 80
The steps for getting values from our file is usually :
- Parse the whole TOML file.
- Get a single table from the file.
- Find a value from the table.
- Convert that value to the appropriate type, i.e., string, int, etc.
- Then, free up that memory if needed.
Below is an example of parsing the values from the example table.
- Parse the whole TOML file.
FILE* fp;
toml_table_t* conf;
char errbuf[200];
/* Open the file. */
if (0 == (fp = fopen("path/to/file.toml", "r"))) {
return handle_error();
}
/* Run the file through the parser. */
conf = toml_parse_file(fp, errbuf, sizeof(errbuf));
if (0 == conf) {
return handle_error();
}
fclose(fp);
/* Alternatively, use `toml_parse` which takes a string rather than a file. */
conf = toml_parse("A null terminated string that is TOML\0", errbuf, sizeof(errbuf);
- Get a single table from the file.
toml_table_t* server;
/* Locate the [server] table. */
if (0 == (server = toml_table_in(conf, "server"))) {
return handle_error();
}
- Find a value from the table.
- Convert that value to the appropriate type (I.E. string, int).
toml_raw_t raw;
char* host;
int64_t port;
/* Extract 'host' config value. */
if (0 == (raw = toml_raw_in(server, "host"))) {
return handle_error();
}
/* Convert the raw value into a string. */
if (toml_rtos(raw, &host)) {
return handle_error();
}
/* Extract 'port' config value. */
if (0 == (raw = toml_raw_in(server, "port"))) {
return handle_error();
}
/* Convert the raw value into an int. */
if (toml_rtoi(raw, &port)) {
return handle_error();
}
- Then, free up that memory if needed.
/* Use `toml_free` on the table returned from `toml_parse[_file]`. */
toml_free(conf);
/* Free any values returned from `toml_rto*`. */
free(host);
A normal make suffices. Alternately, you can also simply include the
toml.c
and toml.h
files in your project.
To test against the standard test set provided by BurntSushi/toml-test:
% make
% cd test1
% bash build.sh # do this once
% bash run.sh # this will run the test suite
To test against the standard test set provided by iarna/toml:
% make
% cd test2
% bash build.sh # do this once
% bash run.sh # this will run the test suite