#pragma once #include "transfer.hpp" #include namespace saw { namespace easy { template error_or encode_and_write_file(const std::filesystem::path& p_, const data& data_){ data dat; { codec cdc; auto eov = cdc.encode(data_,dat); if(eov.is_error()){ return eov; } } remote file_remote; auto eo_addr = file_remote.parse_address(p_); if(eo_addr.is_error()){ return std::move(eo_addr.get_error()); } auto& addr = eo_addr.get_value(); auto eo_srv = file_remote.template data_listen({*addr}); if(eo_srv.is_error()){ return std::move(eo_srv.get_error()); } auto& srv = eo_srv.get_value(); id fid{0u}; auto eo_write = srv->send(dat, fid); if(eo_write.is_error()){ return eo_write; } return make_void(); } template error_or> read_and_decode_file(const std::filesystem::path& p_){ data dat; remote file_remote; auto eo_addr = file_remote.parse_address(p_); if(eo_addr.is_error()){ return std::move(eo_addr.get_error()); } auto& addr = eo_addr.get_value(); auto eo_srv = file_remote.template data_listen({*addr}); if(eo_srv.is_error()){ return std::move(eo_srv.get_error()); } auto& srv = eo_srv.get_value(); id fid{0u}; auto eo_read = srv->receive(fid); if(eo_read.is_error()){ return std::move(eo_read.get_error()); } auto& read = eo_read.get_value(); { codec cdc; auto eov = cdc.decode(read,dat); if(eov.is_error()){ return std::move(eov.get_error()); } } return dat; } } }