source: sources/src/rpcJsonValue.cc @ 1439:b23bfdd8a935

Revision 1439:b23bfdd8a935, 5.0 KB checked in by niam, 2 years ago (diff)

change contact info

Line 
1/***************************************************************************
2 *            rpcJsonValue.cc
3 *
4 *  Mon Jul 07 2008
5 *  Copyright  2008  Dmytro Milinevskyy
6 *  milinevskyy@gmail.com
7 ****************************************************************************/
8
9/*
10 *  This program is free software; you can redistribute it and/or modify
11 *  it under the terms of the GNU Lesser General Public License version 2.1 as published by
12 *  the Free Software Foundation;
13 *
14 *  This program is distributed in the hope that it will be useful,
15 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 *  GNU Library General Public License for more details.
18 *
19 *  You should have received a copy of the GNU Lesser General Public License
20 *  along with this program; if not, write to the Free Software
21 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 */
23
24/**
25 * vim indentation settings
26 * set tabstop=4
27 * set shiftwidth=4
28 */
29
30#include <libdodo/directives.h>
31
32#include <libdodo/rpcJsonValue.h>
33#include <libdodo/types.h>
34#include <libdodo/dataFormatJsonNode.h>
35#include <libdodo/rpcValue.h>
36
37using namespace dodo::rpc::json;
38
39dodo::rpc::value
40value::jsonToValue(const dodo::data::format::json::node &node)
41{
42    rpc::value val;
43
44    switch (node.valueDataType) {
45        case dodo::data::format::json::node::DATA_STRING:
46            val.valueDataType = dodo::rpc::value::DATA_STRING;
47            val.stringValue = new dodo::string(*node.stringValue);
48
49            break;
50
51        case dodo::data::format::json::node::DATA_OBJECT:
52        {
53            val.valueDataType = dodo::rpc::value::DATA_STRUCT;
54            val.structValue = new dodoMap<dodo::string, rpc::value, dodoMapStringCompare>;
55
56            dodoMap<dodo::string, dodo::data::format::json::node, dodoMapStringCompare>::iterator
57            i = node.objectValue->begin(),
58            j = node.objectValue->end();
59            for (; i != j; ++i)
60                val.structValue->insert(std::make_pair(i->first, jsonToValue(i->second)));
61
62            break;
63        }
64
65        case dodo::data::format::json::node::DATA_ARRAY:
66        {
67            val.valueDataType = dodo::rpc::value::DATA_ARRAY;
68            val.arrayValue = new dodoArray<rpc::value>;
69
70            dodoArray<dodo::data::format::json::node>::const_iterator
71            i = node.arrayValue->begin(),
72            j = node.arrayValue->end();
73            for (; i != j; ++i)
74                val.arrayValue->push_back(jsonToValue(*i));
75
76            break;
77        }
78
79        case dodo::data::format::json::node::DATA_BOOLEAN:
80            val.valueDataType = dodo::rpc::value::DATA_BOOLEAN;
81            val.booleanValue = node.booleanValue;
82
83            break;
84
85        case dodo::data::format::json::node::DATA_NUMERIC:
86            val.valueDataType = dodo::rpc::value::DATA_NUMERIC;
87            val.numericValue = node.numericValue;
88
89            break;
90
91        case dodo::data::format::json::node::DATA_NULL:
92            val.valueDataType = dodo::rpc::value::DATA_BOOLEAN;
93            val.booleanValue = false;
94
95            break;
96    }
97
98    return val;
99}
100
101//-------------------------------------------------------------------
102
103dodo::data::format::json::node
104value::valueToJson(const rpc::value &data)
105{
106    dodo::data::format::json::node node;
107
108    switch (data.valueDataType) {
109        case dodo::rpc::value::DATA_STRING:
110            node.valueDataType = dodo::data::format::json::node::DATA_STRING;
111            node.stringValue = new dodo::string(*data.stringValue);
112
113            break;
114
115        case dodo::rpc::value::DATA_BOOLEAN:
116            node.valueDataType = dodo::data::format::json::node::DATA_BOOLEAN;
117            node.booleanValue = data.booleanValue;
118
119            break;
120
121        case dodo::rpc::value::DATA_NUMERIC:
122            node.valueDataType = dodo::data::format::json::node::DATA_NUMERIC;
123            node.numericValue = (long)data.numericValue;
124
125            break;
126
127        case dodo::rpc::value::DATA_ARRAY:
128        {
129            node.valueDataType = dodo::data::format::json::node::DATA_ARRAY;
130            node.arrayValue = new dodoArray<dodo::data::format::json::node>;
131
132            dodoArray<rpc::value>::const_iterator
133            i = data.arrayValue->begin(),
134            j = data.arrayValue->end();
135            for (; i != j; ++i)
136                node.arrayValue->push_back(valueToJson(*i));
137
138            break;
139        }
140
141        case dodo::rpc::value::DATA_STRUCT:
142        {
143            node.valueDataType = dodo::data::format::json::node::DATA_OBJECT;
144            node.objectValue = new dodoMap<dodo::string, dodo::data::format::json::node, dodoMapStringCompare>;
145
146            dodoMap<dodo::string, rpc::value, dodoMapStringCompare>::const_iterator
147            i = data.structValue->begin(),
148            j = data.structValue->end();
149            for (; i != j; ++i)
150                node.objectValue->insert(std::make_pair(i->first, valueToJson(i->second)));
151
152            break;
153        }
154    }
155
156    return node;
157}
158
159//-------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.