From 37085e09c49db157fc30fe5181bc7b4ef3f9d59e Mon Sep 17 00:00:00 2001 From: Samuel Marks Date: Sun, 27 Sep 2015 14:36:08 +1000 Subject: [Feature] JSON body `i()` now works with strings. Added better error messages also. --- include/json.h | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/json.h b/include/json.h index f647da5..6f9fec9 100644 --- a/include/json.h +++ b/include/json.h @@ -82,6 +82,18 @@ namespace crow Object, }; + const char* get_type_str(type t) { + switch(t){ + case type::Number: return "Number"; + case type::False: return "False"; + case type::True: return "True"; + case type::List: return "List"; + case type::String: return "String"; + case type::Object: return "Object"; + default: return "Unknown"; + } + }; + class rvalue; rvalue load(const char* data, size_t size); @@ -269,8 +281,13 @@ namespace crow int64_t i() const { #ifndef CROW_JSON_NO_ERROR_CHECK - if (t() != type::Number) - throw std::runtime_error("value is not number"); + switch (t()) { + case type::Number: + case type::String: + return boost::lexical_cast(start_, end_-start_); + default: + throw std::runtime_error(strcat("expected number, got: ", get_type_str(t()))); + } #endif return boost::lexical_cast(start_, end_-start_); } -- cgit v1.2.3-54-g00ecf