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.