LCOV - code coverage report
Current view: top level - zerobuf - json.cpp (source / functions) Hit Total Coverage
Test: ZeroBuf Lines: 71 71 100.0 %
Date: 2018-01-09 16:38:26 Functions: 37 37 100.0 %

          Line data    Source code
       1             : 
       2             : /* Copyright (c) 2016, Human Brain Project
       3             :  *                     Stefan.Eilemann@epfl.ch
       4             :  */
       5             : 
       6             : #include "json.h"
       7             : #include "Zerobuf.h"
       8             : #include "detail/base64.h"
       9             : #include "jsoncpp/json/json.h"
      10             : 
      11             : namespace zerobuf
      12             : {
      13             : template <>
      14           6 : ZEROBUF_INL bool fromJSON(const Json::Value& json)
      15             : {
      16           6 :     return json.asBool();
      17             : }
      18             : template <>
      19          14 : ZEROBUF_INL int8_t fromJSON(const Json::Value& json)
      20             : {
      21          14 :     return json.asInt();
      22             : }
      23             : template <>
      24          18 : ZEROBUF_INL uint8_t fromJSON(const Json::Value& json)
      25             : {
      26          18 :     return json.asUInt();
      27             : }
      28             : template <>
      29          28 : ZEROBUF_INL int16_t fromJSON(const Json::Value& json)
      30             : {
      31          28 :     return json.asInt();
      32             : }
      33             : template <>
      34          31 : ZEROBUF_INL uint16_t fromJSON(const Json::Value& json)
      35             : {
      36          31 :     return json.asUInt();
      37             : }
      38             : template <>
      39          59 : ZEROBUF_INL int32_t fromJSON(const Json::Value& json)
      40             : {
      41          59 :     return json.asInt();
      42             : }
      43             : template <>
      44          54 : ZEROBUF_INL uint32_t fromJSON(const Json::Value& json)
      45             : {
      46          54 :     return json.asUInt();
      47             : }
      48             : template <>
      49          14 : ZEROBUF_INL int64_t fromJSON(const Json::Value& json)
      50             : {
      51          14 :     return json.asInt64();
      52             : }
      53             : template <>
      54          28 : ZEROBUF_INL uint64_t fromJSON(const Json::Value& json)
      55             : {
      56          28 :     return json.asUInt64();
      57             : }
      58             : template <>
      59          14 : ZEROBUF_INL float fromJSON(const Json::Value& json)
      60             : {
      61          14 :     return json.asFloat();
      62             : }
      63             : template <>
      64          14 : ZEROBUF_INL double fromJSON(const Json::Value& json)
      65             : {
      66          14 :     return json.asDouble();
      67             : }
      68             : template <>
      69          16 : ZEROBUF_INL std::string fromJSON(const Json::Value& json)
      70             : {
      71          16 :     return json.asString();
      72             : }
      73             : template <>
      74          14 : ZEROBUF_INL uint128_t fromJSON(const Json::Value& json)
      75             : {
      76          14 :     return {json["high"].asUInt64(), json["low"].asUInt64()};
      77             : }
      78             : 
      79             : template <class T>
      80         456 : void toJSON(const T& value, Json::Value& json)
      81             : {
      82         456 :     json = Json::Value(value);
      83         456 : }
      84             : template ZEROBUF_INL void toJSON(const bool&, Json::Value&);
      85             : template ZEROBUF_INL void toJSON(const int8_t&, Json::Value&);
      86             : template ZEROBUF_INL void toJSON(const int16_t&, Json::Value&);
      87             : template ZEROBUF_INL void toJSON(const int32_t&, Json::Value&);
      88             : template ZEROBUF_INL void toJSON(const uint32_t&, Json::Value&);
      89             : template ZEROBUF_INL void toJSON(const float&, Json::Value&);
      90             : template ZEROBUF_INL void toJSON(const double&, Json::Value&);
      91             : template ZEROBUF_INL void toJSON(const std::string&, Json::Value&);
      92             : template <>
      93          32 : ZEROBUF_INL void toJSON(const uint8_t& value, Json::Value& json)
      94             : {
      95          32 :     json = Json::UInt(value);
      96          32 : }
      97             : template <>
      98          48 : ZEROBUF_INL void toJSON(const uint16_t& value, Json::Value& json)
      99             : {
     100          48 :     json = Json::UInt(value);
     101          48 : }
     102             : template <>
     103          24 : ZEROBUF_INL void toJSON(const int64_t& value, Json::Value& json)
     104             : {
     105          24 :     json = Json::Int64(value);
     106          24 : }
     107             : template <>
     108          48 : ZEROBUF_INL void toJSON(const uint64_t& value, Json::Value& json)
     109             : {
     110          48 :     json = Json::UInt64(value);
     111          48 : }
     112             : template <>
     113          24 : ZEROBUF_INL void toJSON(const uint128_t& value, Json::Value& json)
     114             : {
     115          24 :     json["high"] = Json::UInt64(value.high());
     116          24 :     json["low"] = Json::UInt64(value.low());
     117          24 : }
     118             : 
     119          84 : void emptyJSONArray(Json::Value& value)
     120             : {
     121          84 :     value = Json::Value(Json::arrayValue);
     122          84 : }
     123             : 
     124          29 : void fromJSON(const Json::Value& json, Zerobuf& zerobuf)
     125             : {
     126          29 :     zerobuf._parseJSON(json);
     127          29 : }
     128             : 
     129          70 : void toJSON(const Zerobuf& zerobuf, Json::Value& json)
     130             : {
     131          70 :     zerobuf._createJSON(json);
     132          70 : }
     133             : 
     134           8 : std::string fromJSONBinary(const Json::Value& json)
     135             : {
     136           8 :     return base64_decode(json.asString());
     137             : }
     138             : 
     139          16 : void toJSONBinary(const uint8_t* data, const size_t size, Json::Value& json)
     140             : {
     141          16 :     json = Json::Value(base64_encode(data, uint32_t(size)));
     142          16 : }
     143             : 
     144         326 : bool hasJSONField(const Json::Value& json, const std::string& field)
     145             : {
     146         326 :     return json.isMember(field);
     147             : }
     148             : 
     149         198 : const Json::Value& getJSONField(const Json::Value& json,
     150             :                                 const std::string& field)
     151             : {
     152         198 :     return json[field];
     153             : }
     154             : 
     155         504 : Json::Value& getJSONField(Json::Value& json, const std::string& field)
     156             : {
     157         504 :     return json[field];
     158             : }
     159             : 
     160         224 : const Json::Value& getJSONField(const Json::Value& json, const size_t index)
     161             : {
     162         224 :     return json[unsigned(index)];
     163             : }
     164             : 
     165         370 : Json::Value& getJSONField(Json::Value& json, const size_t index)
     166             : {
     167         370 :     return json[unsigned(index)];
     168             : }
     169             : 
     170          39 : size_t getJSONSize(const Json::Value& json)
     171             : {
     172          39 :     return json.size();
     173             : }
     174             : }

Generated by: LCOV version 1.11