summaryrefslogtreecommitdiff
path: root/modules/codec-json
diff options
context:
space:
mode:
authorClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-16 13:41:54 +0200
committerClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-16 13:41:54 +0200
commit47f4cfe677bcd8b3372ddbf09751cd023f3ad9ff (patch)
tree46d7ec60bca1c66c8a088b55f4f0c343bc5ceccb /modules/codec-json
parentd134daa2b0658d8624988062cb10e536ca34c0b8 (diff)
Json decoding for booleans
Diffstat (limited to 'modules/codec-json')
-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();
}
};