1// MessagePack for C++ example
2//
3// Copyright (C) 2008-2015 FURUHASHI Sadayuki and KONDO Takatoshi
4//
5//    Distributed under the Boost Software License, Version 1.0.
6//    (See accompanying file LICENSE_1_0.txt or copy at
7//    http://www.boost.org/LICENSE_1_0.txt)
8//
9
10#include <msgpack.hpp>
11#include <sstream>
12#include <string>
13#include <iostream>
14
15class old_class {
16public:
17    old_class() : value("default") { }
18
19    std::string value;
20
21    MSGPACK_DEFINE(value);
22};
23
24class new_class {
25public:
26    new_class() : value("default"), flag(-1) { }
27
28    std::string value;
29    int flag;
30
31    MSGPACK_DEFINE(value, flag);
32};
33
34int main(void)
35{
36    {
37        old_class oc;
38        new_class nc;
39
40        std::stringstream sbuf;
41        msgpack::pack(sbuf, oc);
42
43        msgpack::unpacked result;
44        msgpack::unpack(result, sbuf.str().data(), sbuf.str().size());
45        msgpack::object obj = result.get();
46
47        obj.convert(nc);
48
49        std::cout << obj << " value=" << nc.value << " flag=" << nc.flag << std::endl;
50    }
51
52    {
53        new_class nc;
54        old_class oc;
55
56        std::stringstream sbuf;
57        msgpack::pack(sbuf, nc);
58
59        msgpack::unpacked result;
60        msgpack::unpack(result, sbuf.str().data(), sbuf.str().size());
61        msgpack::object obj = result.get();
62
63        obj.convert(oc);
64
65        std::cout << obj << " value=" << oc.value << std::endl;
66    }
67}
68