#pragma once #include #include #include #include #include #include "transfer.hpp" namespace saw { /** * This class acts as a helper for rpc calls and representing data on the remote. */ template class data_or_id { private: /** * Variant representing the either id or data class. */ std::variant, data> doi_; public: /** * Constructor for instantiating. */ data_or_id(const id& val): doi_{val} {} /** * Constructor for instantiating. */ data_or_id(data val): doi_{std::move(val)} {} /** * Check if this class holds an id. */ bool is_id() const { return std::holds_alternative>(doi_); } /** * Check if this class holds data. */ bool is_data() const { return std::holds_alternative>(doi_); } /** * Returns the id. */ id get_id() const { return std::get>(doi_); } /** * Return a data reference. */ data& get_data(){ return std::get>(doi_); } /** * Return a data reference. */ const data& get_data() const { return std::get>(doi_); } }; /** * Representing data on the remote */ template class remote_data; template class rpc_client; /** * Implementation of a remote server on the backend */ template class rpc_server { private: interface iface_; public: rpc_server(interface iface): iface_{std::move(iface)} {} }; /** * Representation of a remote. * Partially similar to a network address */ template class remote_address { static_assert(always_false, "Type of remote not supported"); /** * */ }; /** * Reference Backend structure */ template class remote { static_assert(always_false, "Type of backend not supported"); }; }