aboutsummaryrefslogtreecommitdiffstats
path: root/amalgamate
diff options
context:
space:
mode:
Diffstat (limited to 'amalgamate')
-rw-r--r--amalgamate/crow_all.h21
1 files changed, 19 insertions, 2 deletions
diff --git a/amalgamate/crow_all.h b/amalgamate/crow_all.h
index 5aa6a83..63b4dd0 100644
--- a/amalgamate/crow_all.h
+++ b/amalgamate/crow_all.h
@@ -1214,6 +1214,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);
@@ -1401,8 +1413,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<int64_t>(start_, end_-start_);
+ default:
+ throw std::runtime_error(strcat("expected number, got: ", get_type_str(t())));
+ }
#endif
return boost::lexical_cast<int64_t>(start_, end_-start_);
}