Git Product home page Git Product logo

libcyaml's Introduction

LibCYAML: Schema-based YAML parsing and serialisation

Build Status Code Coverage Code Quality

LibCYAML is a C library for reading and writing structured YAML documents. It is written in ISO C11 and licensed under the ISC licence.

Overview

The fundamental idea behind CYAML is to allow applications to construct schemas which describe both the permissible structure of the YAML documents to read/write, and the C data structure(s) in which the loaded data is arranged in memory.

Goals

  • Make it easy to load YAML into client's custom C data structures.
  • Good compromise between flexibility and simplicity.

Features

  • Load, Save and Free functions.
  • Reads and writes arbitrary client data structures.
  • Schema-driven, allowing control over permitted YAML, for example:
    • Required / optional mapping fields.
    • Allowed / disallowed values.
    • Minimum / maximum sequence entry count.
    • etc...
  • Enumerations and flag words.
  • YAML backtraces make it simple for users to fix their YAML to conform to your schema.
  • Uses standard libyaml library for low-level YAML read / write.
  • Support for YAML aliases and anchors.

Building

To build the library, run:

make

You can control the optimisation and building of asserts by setting the build variant:

make VARIANT=debug
make VARIANT=release

Another debug build variant which is built with address sanitiser (incompatible with valgrind) can be built with:

make VARIANT=san

Installation

To install a release version of the library, run:

make install VARIANT=release

It will install to the PREFIX /usr/local by default, and it will use DESTDIR and PREFIX from the environment if set.

Testing

To run the tests, run any of the following, which generate various levels of output verbosity (optionally setting VARIANT=release, or VARIANT=san):

make test
make test-quiet
make test-verbose
make test-debug

To run the tests under valgrind, a similar set of targets is available:

make valgrind
make valgrind-quiet
make valgrind-verbose
make valgrind-debug

To run a single test or a subset of tests, use the TESTLIST variable, which expects a space and/or comma separated list of test names:

make test-debug TESTLIST=test_load_mapping_without_any_fields
make valgrind-debug TESTLIST="test_load_no_log test_util_state_invalid"

To generate a test coverage report, gcovr is required:

make coverage

Documentation

To generate both public API documentation, and documentation of CYAML's internals, doxygen is required:

make docs

Alternatively, the read the API documentation directly from the cyaml.h header file.

There is also a tutorial.

Examples

In addition to the documentation, you can study the examples.

libcyaml's People

Contributors

tlsa avatar milahu avatar damageboy avatar esmil avatar gabrielganne avatar idryzhov avatar jamesdunne avatar app13y avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.