blob: 6116497946b31a672b6cc55d4388529f1822009d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#pragma once
#include <forstio/buffer.hpp>
#include "data.hpp"
namespace saw {
namespace trans {
template<uint64_t Len = 8u>
struct FixedLength {};
template<uint64_t Len = 8u>
struct VarLength {};
struct NewLine {};
struct CarriageReturnNewLine {};
}
template<typename T>
class transport;
template<uint64_t Len>
class transport<trans::FixedLength<Len>> {
private:
public:
error_or<buffer_view> view_slice(buffer& buff) const {
typename native_data_type<schema::Primitive<schema::UnsignedInteger, Len>>::type val{};
buffer_view view{buff};
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>();
}
buff.read_advance(Len);
buffer_view data_view{buff, val, 0u};
return data_view;
}
error_or<array_buffer> chain_slice(chain_array_buffer& buff) const {
(void) buff;
return make_error<err::not_implemented>();
}
};
}
|