From 228e290b943f6496ec34cc8f9899e695972a324c Mon Sep 17 00:00:00 2001 From: Riyyi Date: Wed, 21 Sep 2022 17:24:38 +0200 Subject: [PATCH] Json: Add support for more integral types --- src/ruc/json/fromjson.h | 28 +++++++++++++++++++++++++--- src/ruc/json/tojson.h | 32 ++++++++++++++++++++++++++++---- 2 files changed, 53 insertions(+), 7 deletions(-) diff --git a/src/ruc/json/fromjson.h b/src/ruc/json/fromjson.h index 0909ceb..4e8b82f 100644 --- a/src/ruc/json/fromjson.h +++ b/src/ruc/json/fromjson.h @@ -7,7 +7,8 @@ #pragma once #include // transform -#include // nullptr_t +#include // nullptr_t, size_t +#include // int32_t, int64_t, uint32_t #include #include #include @@ -45,10 +46,31 @@ void fromJson(const Json& json, bool& boolean) } template -void fromJson(const Json& json, int& number) +void fromJson(const Json& json, int32_t& number) { VERIFY(json.type() == Json::Type::Number); - number = (int)json.asDouble(); + number = static_cast(json.asDouble()); +} + +template +void fromJson(const Json& json, uint32_t& number) +{ + VERIFY(json.type() == Json::Type::Number); + number = static_cast(json.asDouble()); +} + +template +void fromJson(const Json& json, int64_t& number) +{ + VERIFY(json.type() == Json::Type::Number); + number = static_cast(json.asDouble()); +} + +template +void fromJson(const Json& json, size_t& number) // uint64_t +{ + VERIFY(json.type() == Json::Type::Number); + number = static_cast(json.asDouble()); } template diff --git a/src/ruc/json/tojson.h b/src/ruc/json/tojson.h index 73ff151..a20fb67 100644 --- a/src/ruc/json/tojson.h +++ b/src/ruc/json/tojson.h @@ -6,8 +6,8 @@ #pragma once -#include // assert -#include // nullptr_t +#include // nullptr_t, size_t +#include // int32_t, int64_t, uint32_t #include #include #include @@ -31,11 +31,35 @@ struct jsonConstructor { } template - static void construct(Json& json, int number) + static void construct(Json& json, int32_t number) { json.destroy(); json.m_type = Json::Type::Number; - json.m_value.number = (double)number; + json.m_value.number = static_cast(number); + } + + template + static void construct(Json& json, int64_t number) + { + json.destroy(); + json.m_type = Json::Type::Number; + json.m_value.number = static_cast(number); + } + + template + static void construct(Json& json, uint32_t number) + { + json.destroy(); + json.m_type = Json::Type::Number; + json.m_value.number = static_cast(number); + } + + template + static void construct(Json& json, size_t number) + { + json.destroy(); + json.m_type = Json::Type::Number; + json.m_value.number = static_cast(number); } template