#pragma once /* * Copyright (C) 2018 "IoT.bzh" * Author Loïc Collignon * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include template inline T& jcast(T& v, json_object* o) { v << o; return v; } template inline T& jcast_array(T& v, json_object* o) { if (o == nullptr) return v; auto sz = json_object_array_length(o); for(auto i = 0; i < sz ; ++i) { typename T::value_type item; jcast(item, json_object_array_get_idx(o, i)); v.push_back(item); } return v; } template<> inline bool& jcast(bool& v, json_object* o) { v = (json_object_get_boolean(o) == TRUE); return v; } template<> inline double& jcast(double& v, json_object* o) { v = json_object_get_double(o); return v; } template<> inline int32_t& jcast(int32_t& v, json_object* o) { v = json_object_get_int(o); return v; } template<> inline int64_t& jcast(int64_t& v, json_object* o) { v = json_object_get_int(o); return v; } template<> inline std::string& jcast(std::string& v, json_object* o) { const char* tmp = json_object_get_string(o); v = tmp ? tmp : ""; return v; } template inline T& jcast(T& v, json_object* o, std::string field) { json_object * value; json_object_object_get_ex(o, field.c_str(), &value); return jcast(v, value); } template inline T& jcast_array(T& v, json_object* o, std::string field) { json_object * value; json_object_object_get_ex(o, field.c_str(), &value); return jcast_array(v, value); }