puppetlabs / cpp-hocon

A C++ port of the Typesafe Config library.
Other
81 stars 57 forks source link

C++ HOCON Parser

Travis CI Appveyor

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.

Caveats

This is a mostly complete implementation of the HOCON format. It currently has some known limitations

Install

Build Requirements

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

  1. Enter your build environment of choice, i.e. cd release or cd debug
  2. make
  3. (optional) install with make install

Testing

Run tests with make test.