Bond
Introduction

Bond is an extensible framework for working with schematized data. It is suitable for scenarios ranging from service communications to Big Data storage and processing.

Bond defines a rich type system and schema versioning rules which allow forward and backward compatibility. The core Bond features include high performance serialization/deserialization and a very powerful, generic data transform mechanism. The framework is highly extensible via pluggable serialization protocols, data streams, user defined type aliases and more.

By design Bond is language and platform independent and is currently supported for C++, C#, and Python on Linux, OS X and Windows.

Basic example

In Bond data schemas are defined using idl-like syntax:

namespace example

struct Record
{
    0: string          name;
    1: vector<double>  items;
}

In order to use the schema in a C++ program, it needs to be compiled using the Bond compiler gbc. This step is sometimes also referred to as code generation (or codegen) because the compilation generates C++ code corresponding to the schema definition.

gbc c++ example.bond

Using the generated C++ code, we can write a simple program that will serialize and deserialize an instance of the Record schema using Compact Binary protocol:

#include "example_reflection.h"

#include <bond/core/bond.h>
#include <bond/stream/output_buffer.h>

int main()
{
    example::Record src;

    src.name = "test";
    src.items.push_back(3.14);

    bond::OutputBuffer output;
    bond::CompactBinaryWriter<bond::OutputBuffer> writer(output);

    Serialize(src, writer);

    bond::InputBuffer input(output.GetBuffer());
    bond::CompactBinaryReader<bond::InputBuffer> reader(input);

    example::Record dst;

    Deserialize(reader, dst);

    return 0;
}

User's Manual

For more information see the User's Manual.