summaryrefslogtreecommitdiff
path: root/modules/codec/c++/csv.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/codec/c++/csv.hpp')
-rw-r--r--modules/codec/c++/csv.hpp30
1 files changed, 22 insertions, 8 deletions
diff --git a/modules/codec/c++/csv.hpp b/modules/codec/c++/csv.hpp
index 82010d7..240ed75 100644
--- a/modules/codec/c++/csv.hpp
+++ b/modules/codec/c++/csv.hpp
@@ -97,7 +97,7 @@ struct csv_encode<schema::Struct<schema::Member<V,K>...>, FromDecode> {
/**
* Replace this with row separator
*/
- constexpr std::string_view lit = "\r\n";
+ constexpr std::string_view lit = "\n";
for(int8_t iter : lit){
auto eov = stream_value<schema::Int8>::encode(iter, to);
if ( eov.is_error()){
@@ -110,7 +110,10 @@ struct csv_encode<schema::Struct<schema::Member<V,K>...>, FromDecode> {
}
static error_or<void> encode_header(buffer& to){
- return encode_header_i<0>(to);
+ if constexpr (sizeof...(V) > 0u){
+ return encode_header_i<0u>(to);
+ }
+ return make_void();
}
template<size_t i>
@@ -225,12 +228,18 @@ struct csv_decode<schema::Array<T,Dim>, FromDecode> {
template<typename Schema>
class data<Schema, encode::Csv> {
private:
- ring_buffer buffer_;
+ own<buffer> buffer_;
public:
- data() = default;
+ data():
+ buffer_{heap<ring_buffer>()}
+ {}
+
+ data(own<buffer> buffer__):
+ buffer_{std::move(buffer__)}
+ {}
buffer& get_buffer(){
- return buffer_;
+ return *buffer_;
}
};
@@ -253,10 +262,15 @@ public:
template<typename ToDecode>
static error_or<void> decode(data<Schema,encode::Csv>& from, data<Schema, ToDecode>& to){
- (void) to;
- (void) from;
+ auto& buff = from.get_buffer();
+ buffer_view buff_v{buff};
+ auto eov = impl::csv_decode<Schema, ToDecode>::decode(buff_v, to);
+ if(eov.is_error()){
+ return eov;
+ }
+ buff.write_advance(buff_v.write_offset());
- return make_error<err::not_implemented>();
+ return eov;
}
};
}