From 9b5fdb05609c24a03d4e0e4386e9eadbfe6c5405 Mon Sep 17 00:00:00 2001 From: Claudius Holeksa Date: Fri, 23 Jun 2023 09:41:02 +0200 Subject: c++,codec-json: Added minor helpers for json --- src/codec-json/json.tmpl.h | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/codec-json/json.tmpl.h b/src/codec-json/json.tmpl.h index b4e8d6d..063595d 100644 --- a/src/codec-json/json.tmpl.h +++ b/src/codec-json/json.tmpl.h @@ -314,46 +314,60 @@ struct json_encode...>, RootSchema, FromEnco } }; +struct json_helper { + static bool is_whitespace(int8_t ch) { + return ch == '\t' || ch == ' ' || ch == '\r' || ch == '\n'; + } + + static void skip_whitespace(buffer_view& buff) { + while(buff.read_composite_length() > 0 && json_helper::is_whitespace(buff.read())) { + buff.read_advance(1); + } + } +}; + template struct json_decode; template struct json_decode, RootSchema, ToDecode> { - static error_or decode(buffer_view& buff, data, ToDecode>& to){ - assert((buff.read() >= '0' && buff.read() <= '9') || - buff.read() == '+' || buff.read() == '-'); + static error_or decode(buffer_view& buff, data, ToDecode>& to) { + assert( + ( buff.read() >= '0' && buff.read() <= '9') + || ( buff.read() == '+' || buff.read() == '-') + ); std::size_t offset = 0; - if(buff.read() == '-'){ + if (buff.read() == '-'){ ++offset; - }else if(buff.read() == '+'){ + } else if (buff.read() == '+'){ return make_error(); } if (offset >= buff.read_composite_length()) { return make_error(); } - if(buff.read(offset) >= '1' && buff.read(offset) <= '9'){ + if (buff.read(offset) >= '1' && buff.read(offset) <= '9') { ++offset; - if(offset >= buff.read_composite_length()){ + if(offset >= buff.read_composite_length()) { return make_error(); } while(1){ - if (buff.read(offset) >= '0' && buff.read(offset) <= '9'){ + if (buff.read(offset) >= '0' && buff.read(offset) <= '9') { ++offset; - if(offset >= buff.read_composite_length()){ + if(offset >= buff.read_composite_length()) { break; } continue; } break; } - }else if (buff.read(offset) == '0' ){ + } else if (buff.read(offset) == '0' ) { ++offset; - }else{ + } else { return make_error(); } @@ -388,7 +402,8 @@ struct json_decode, RootSchema, ToDecode> { if( buff.read_composite_length() == 0 ){ return make_error(); } - + + json_helper::skip_whitespace(buff); } return void_t{}; } -- cgit v1.2.3