This is a port of the TypesafeConfig library to C++.
The library provides C++ support for the HOCON configuration file format.
MMMMMMMMMMMMMMMMMMMM
.====================.
MMMMMMMMMMMMMMMMMMMMMM
.MMMMMMMMMMMMMMMMMMMMMM.
===.7MMMIN7NMMMMMMMMM7M=MMMM,===
MMM.7MM: DMMMMM7 :MMM=MMM
MMM.7MM, DMMMMM? ~MMM=MMM
MMM.7MMM~++~?MMMMMMM~++~MMMM=MMM
.MMMMMMMMMMMMMMMMMMMMMM.
MMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMM
MMM HOCON MMM
MMMMMMMMMMMMMMMMMMMMMM
.MMMMMMMMMMMMMMMMMM.
.MMMMMMMMMMMMMMMMMM.
.MMMMMMMMMMMMMMMMMMMMMMMM
. MMMMMMMMMMMMM88MMMMMMMMMM8MM .
7=MMMMMMMM++ A CONFIG FILE ++M8MMMMMM7=
M=MMMMMMMM+ FORMAT DESIGNED +M8MMMMMM7M
M=MMMMMMMM++ FOR HUMANS ++M8MMMMMM7M
=MMMMMMMMMMMMMMMMM88MMMMMMMMMM8MMMMMM7
7MM.88MMMMMMMMMMM88MMMMMMMMMMO88 MM8
7MM MMMMMMMMMMM88MMMMMMMMMM8 MM8
7MM MMMMMMMMMMM88MMMMMMMMMM8 MM8
7MM MMMDMMMM?MM88MM?MMMMOMM8 MM8
To get started, install it, then to parse a file:
#include <hocon/parser/config_document_factory.hpp>
#include <leatherman/file_util/file.hpp>
using hocon::config_document_factory::parse_file;
using leatherman::file_util::write_to_file;
int main(int argc, char** argv) {
auto doc = parse_file("/path/to/file.conf");
doc.with_value_text("a.b", "42");
write_to_file(doc.render(), "/path/to/file.conf");
return 0;
}
You can use hocon::config_document_factory::parse_string
to parse a string. config_document is used to modify a file while preserving all formatting. Use config to read from the config or if you don't care about preserving formatting.
Note that file extensions matter. A .conf
file will be parsed as HOCON, a .json
file will be parsed as JSON, and other extensions will be ignored.
See the docs for more.
Caveats
This is a mostly complete implementation of the HOCON format. It currently has some known limitations
- Include requires the location specifier, i.e.
include "foo"
won't work but include file("foo")
will. URL is not yet implemented, and classpath won't be supported as it makes less sense outside of the JVM.
- Unicode testing is absent so support is unknown. There are likely things that won't work.
Install
Build Requirements
- OSX or Linux
- GCC >= 4.8 or Clang >= 3.4 (with libc++)
- CMake >= 3.2.2
- Boost Libraries >= 1.54
- Leatherman
Pre-Build
Prepare the cmake release environment:
$ mkdir release
$ cd release
$ cmake ..
Optionally, also prepare the debug environment:
$ mkdir debug
$ cd debug
$ cmake -DCMAKE_BUILD_TYPE=Debug ..
Building
- Enter your build environment of choice, i.e.
cd release
or cd debug
make
- (optional) install with
make install
Testing
Run tests with make test
.