summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/codec-json/c++/json.tmpl.hpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/modules/codec-json/c++/json.tmpl.hpp b/modules/codec-json/c++/json.tmpl.hpp
index 6193e3f..36f14de 100644
--- a/modules/codec-json/c++/json.tmpl.hpp
+++ b/modules/codec-json/c++/json.tmpl.hpp
@@ -546,8 +546,26 @@ struct json_decode<schema::Bool, ToDecode> {
using Schema = schema::Bool;
static error_or<void> decode(buffer_view& buff, data<Schema, ToDecode>& to){
+ SAW_ASSERT(buff.read() == 't' || buff.read() == 'f'){
+ return make_error<err::invalid_state>("Invalid JSON boolean");
+ }
+
+ bool assumption = (buff.read() == 't');
+ std::string_view expected_str = assumption ? "true" : "false";
- return make_error<err::not_implemented>();
+ if(buff.read_composite_length() < expected_str.size()){
+ return make_error<err::buffer_exhausted>();
+ }
+
+ for(uint64_t i = 0; i < expected_str.size(); ++i){
+ if(buff.read(i) != static_cast<uint8_t>(expected_str[i])){
+ return make_error<err::invalid_state>("Invalid JSON boolean");
+ }
+ }
+
+ to.set(assumption);
+ buff.read_advance(expected_str.size());
+
return make_void();
}
};