This repository is archived and Perforce will no longer be updating this repository. For more information, see this Puppet blog post.
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 <fstream>
using hocon::config_document_factory::parse_file;
int main(int argc, char** argv) {
auto doc = parse_file("file.conf");
doc = doc->with_value_text("a", "42");
std::ofstream out("file.conf");
out << doc->render();
return 0;
}
If you build cpp-hocon with -DBUILD_SHARED_LIBS=ON, then the example can be built with
c++ example.cc -o example -std=c++11 -lcpp-hocon
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.
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 butinclude 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.
- OSX or Linux
- GCC >= 4.8 or Clang >= 3.4 (with libc++)
- CMake >= 3.2.2
- Boost Libraries >= 1.54
- Leatherman
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 ..
- Enter your build environment of choice, i.e.
cd releaseorcd debug make- (optional) install with
make install
Run tests with make test.