diff options
author | Claudius "keldu" Holeksa <mail@keldu.de> | 2024-07-04 16:32:14 +0200 |
---|---|---|
committer | Claudius "keldu" Holeksa <mail@keldu.de> | 2024-07-04 16:32:14 +0200 |
commit | 40369c781e43282992e720efaaa99fa5e60c0d20 (patch) | |
tree | 3a862e006b000adf3aec77334a62eef8eb6215f4 /modules/io_codec | |
parent | 596964ba245e17444baa196c16b4531c03f7a4b2 (diff) |
Preparation work for loopback
Diffstat (limited to 'modules/io_codec')
-rw-r--r-- | modules/io_codec/c++/remote.hpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/modules/io_codec/c++/remote.hpp b/modules/io_codec/c++/remote.hpp new file mode 100644 index 0000000..3ff5822 --- /dev/null +++ b/modules/io_codec/c++/remote.hpp @@ -0,0 +1,55 @@ +#pragma once + +#include <filesystem> + +namespace saw { +namespace rmt { +struct FileSystem {}; +} + +template<> +class remote_address<rmt::FileSystem> { +private: + std::filesystem::path path_; +public: + remote_address(const std::filesystem::path& path__): + path_{path__} + {} +}; + +template<typename Iface, typename Encoding, typename Storage> +class rpc_client<Iface, Encoding, Storage, rmt::FileSystem> { +private: + ptr<remote_address<rmt::FileSystem>> addr_; +public: + rpc_client(ptr<remote_address<rmt::FileSystem>> addr__): + addr_{addr__} + {} +}; + +template<typename Iface, typename Encoding, typename Storage> +class rpc_server<Iface, Encoding, Storage, rmt::FileSystem> { +private: + ptr<remote_address<rmt::FileSystem>> addr_; +public: + rpc_server(ptr<remote_address<rmt::FileSystem>> addr__): + addr_{addr__} + {} +}; + +template<> +class remote<rmt::FileSystem> { +private: + SAW_FORBID_COPY(remote); + SAW_FORBID_MOVE(remote); +public: + error_or<own<remote_address<rmt::FileSystem>>> parse_address(const std::string_view& path_v){ + return heap<remote_address<rmt::FileSystem>>(path_v); + } + + template<typename Iface, typename Encoding, typename Storage> + rpc_server<Iface, Encoding, Storage, rmt::FileSystem> listen(const remote_address<rmt::FileSystem>& addr, typename rpc_server<Iface,Encoding,Storage,rmt::FileSystem>::InterfaceT iface){ + return {addr, std::move(iface)}; + } +}; +} |