summaryrefslogtreecommitdiff
path: root/modules/codec/c++/transport.hpp
blob: 86079a2ca6c8287a1e365f996b6e3b77df7a4698 (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 transport {
template<uint64_t Len = 8u>
struct FixedLength {};

template<uint64_t Len = 8u>
struct VarLength {};

struct NewLine {};
struct CarriageReturnNewLine {};
}

template<typename Schema, uint64_t Len>
struct codec<Schema, transport::FixedLength<Len>> {
private:
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};

		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>();
		}

		buffer_view data_view{buff, val + Len, 0u};
		data_view.read_advance(Len);

		return data_view;
	}

	error_or<array_buffer> chain_slice(chain_array_buffer& buff) const {
		(void) buff;



		return make_error<err::not_implemented>();
	}
};
}