diff options
Diffstat (limited to 'modules/codec/c++')
-rw-r--r-- | modules/codec/c++/transport.hpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/modules/codec/c++/transport.hpp b/modules/codec/c++/transport.hpp index 0bb70eb..77baf36 100644 --- a/modules/codec/c++/transport.hpp +++ b/modules/codec/c++/transport.hpp @@ -22,9 +22,19 @@ public: error_or<buffer_view> view_slice(buffer& buff) const { (void) buff; + typename native_data_type<schema::Primitive<schema::UnsignedInteger, Len>>::type val{}; buffer_view view{buff}; - return make_error<err::not_implemented>(); + auto eov = stream_value<schema::Primitive<schema::UnsignedInteger, Len>>::decode(val, view); + if(eov.is_error()){ + return std::move(eov.get_error()); + } + + if(view.read_composite_length() < val){ + return make_error<err::buffer_exhausted>(); + } + + return view; } error_or<array_buffer> chain_slice(chain_array_buffer& buff) const { |