summaryrefslogtreecommitdiff
path: root/src/codec-json/json.tmpl.h
diff options
context:
space:
mode:
authorClaudius Holeksa <mail@keldu.de>2023-06-23 09:41:02 +0200
committerClaudius Holeksa <mail@keldu.de>2023-06-23 09:41:20 +0200
commit9b5fdb05609c24a03d4e0e4386e9eadbfe6c5405 (patch)
tree948d0c0627ee135b9d461cbff369a2231a6e55a2 /src/codec-json/json.tmpl.h
parent89c8277bbc5c20082e0eaff25c0ee7d6d3c89a48 (diff)
c++,codec-json: Added minor helpers for json
Diffstat (limited to 'src/codec-json/json.tmpl.h')
-rw-r--r--src/codec-json/json.tmpl.h39
1 files changed, 27 insertions, 12 deletions
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<schema::Union<schema::Member<T,Key>...>, 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<typename Schema, typename RootSchema, typename ToDecode>
struct json_decode;
template<typename T, size_t N, typename RootSchema, typename ToDecode>
struct json_decode<schema::Primitive<T,N>, RootSchema, ToDecode> {
- static error_or<void> decode(buffer_view& buff, data<schema::Primitive<T,N>, ToDecode>& to){
- assert((buff.read() >= '0' && buff.read() <= '9') ||
- buff.read() == '+' || buff.read() == '-');
+ static error_or<void> decode(buffer_view& buff, data<schema::Primitive<T,N>, 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<err::not_supported>();
}
if (offset >= buff.read_composite_length()) {
return make_error<err::buffer_exhausted>();
}
- 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<err::buffer_exhausted>();
}
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<err::buffer_exhausted>();
}
@@ -388,7 +402,8 @@ struct json_decode<schema::Array<T,D>, RootSchema, ToDecode> {
if( buff.read_composite_length() == 0 ){
return make_error<err::buffer_exhausted>();
}
-
+
+ json_helper::skip_whitespace(buff);
}
return void_t{};
}