aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorSamuel Marks <samuelmarks@gmail.com>2015-09-27 14:36:08 +1000
committerSamuel Marks <samuelmarks@gmail.com>2015-09-27 14:36:08 +1000
commit37085e09c49db157fc30fe5181bc7b4ef3f9d59e (patch)
tree0742a444c8375c577242d42b05113c8ed39c8984 /include
parent55dd19eb810da007488e996ae91af16dabfd4a0b (diff)
downloadcrow-37085e09c49db157fc30fe5181bc7b4ef3f9d59e.tar.gz
crow-37085e09c49db157fc30fe5181bc7b4ef3f9d59e.zip
[Feature] JSON body `i()` now works with strings. Added better error messages also.
Diffstat (limited to 'include')
-rw-r--r--include/json.h21
1 files changed, 19 insertions, 2 deletions
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<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_);
}