diff options
Diffstat (limited to 'src/codec-json/json.h')
-rw-r--r-- | src/codec-json/json.h | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/codec-json/json.h b/src/codec-json/json.h index c8456b5..f547e54 100644 --- a/src/codec-json/json.h +++ b/src/codec-json/json.h @@ -10,11 +10,6 @@ namespace saw { namespace encode { struct Json {}; } -} - -#include "json.tmpl.h" - -namespace saw { template<typename Schema> class data<Schema, encode::Json> { @@ -23,12 +18,14 @@ private: public: data():buffer_{}{} + data(std::size_t ring_size_):buffer_{ring_size_}{} + buffer& get_buffer(){ return buffer_; } - void push(uint8_t val){ - buffer_.push(val); + error push(uint8_t val){ + return buffer_.push(val); } std::size_t get_size() const { @@ -43,6 +40,11 @@ public: return buffer_.read(i); } }; +} + +#include "json.tmpl.h" + +namespace saw { /** * Codec class for json @@ -71,9 +73,16 @@ public: SAW_DEFAULT_MOVE(codec); template <typename FromEncoding> - error_or<void> encode(const data<Schema, FromEncoding>& from_encode, data<Schema, encode::Json>& to_encode){ + error_or<void> encode(const data<Schema, FromEncoding>& from_encode, data<Schema, encode::Json>& to_encode){ // To Be encoded - return impl::json_encode<Schema, Schema, FromEncoding>::encode(from_encode, to_encode); + buffer_view buff_v{to_encode.get_buffer()}; + auto eov = impl::json_encode<Schema, Schema, FromEncoding>::encode(from_encode, buff_v); + if(eov.is_error()){ + return std::move(eov.get_error()); + } + to_encode.get_buffer().write_advance(buff_v.write_offset()); + + return void_t{}; } template <typename ToEncoding> |