blob: 1dbe0386ede9aa707615c17c6f8d25c78343f7aa (
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
52
53
54
55
56
57
58
59
60
61
62
|
#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<uint64_t> wrap(buffer& out_buff, buffer& in_buff){
using trans_type = typename native_data_type<schema::Primitive<schema::UnsignedInteger, Len>>::type;
trans_type val{};
val = static_cast<trans_type>(in_buff.read_composite_length());
auto eov = stream_value<schema::Primitive<schema::UnsignedInteger, Len>>::encode(val, out_buff);
if(eov.is_error()){
auto& err = eov.get_error();
return std::move(err);
}
return Len;
}
error_or<array_buffer> chain_slice(chain_array_buffer& buff) const {
(void) buff;
return make_error<err::not_implemented>();
}
};
}
|