diff options
author | Jaeseung Ha <ipknhama@gmail.com> | 2015-11-28 17:28:39 +0900 |
---|---|---|
committer | Jaeseung Ha <ipknhama@gmail.com> | 2015-11-28 17:28:39 +0900 |
commit | 78cbae4e2f8752ce5fd6f00fb7da24f6c6a5533e (patch) | |
tree | 0742a444c8375c577242d42b05113c8ed39c8984 /amalgamate | |
parent | 6a4e80811a351d4e0e65b2dc4145387b5088a6b9 (diff) | |
parent | 37085e09c49db157fc30fe5181bc7b4ef3f9d59e (diff) | |
download | crow-78cbae4e2f8752ce5fd6f00fb7da24f6c6a5533e.tar.gz crow-78cbae4e2f8752ce5fd6f00fb7da24f6c6a5533e.zip |
Merge pull request #91 from SamuelMarks/json_str_to_i
[Feature] JSON body `i()` now works with strings. Added better error messages also.
Diffstat (limited to 'amalgamate')
-rw-r--r-- | amalgamate/crow_all.h | 21 |
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_); } |