MACE
1.0.0
|
00001 #ifndef _MACE_RPC_MESSAGE_HPP_ 00002 #define _MACE_RPC_MESSAGE_HPP_ 00003 #include <vector> 00004 #include <boost/optional.hpp> 00005 #include <utility> 00006 00007 namespace mace { namespace rpc { 00008 00009 typedef std::vector<char> datavec; 00013 struct message { 00014 enum error_type { 00015 none = 0, 00016 unknown_method = 1, 00017 invalid_response = 2, 00018 broken_promise = 3, 00019 exception_thrown = 4 00020 }; 00021 00022 boost::optional<int32_t> id; 00023 error_type err; 00024 std::string meth; 00025 datavec data; 00026 00027 inline message( message&& m ) 00028 :id(m.id), 00029 err(m.err), 00030 meth(std::move(m.meth)), 00031 data( std::move(m.data) ){} 00032 00033 inline message( std::string&& m, datavec&& param, int rid, error_type e = none ) 00034 :id(rid),err(e),meth(std::move(m)),data(std::move(param)) {} 00035 00036 inline message( datavec&& param, int rid ) 00037 :id(rid),err(none),data(std::move(param)) {} 00038 00039 inline message( datavec&& result, int rid, error_type e ) 00040 :id(rid),err(e),data(std::move(result)) {} 00041 00042 inline message( std::string&& m, datavec&& param ) 00043 :err(none), meth(std::move(m)),data(std::move(param)) {} 00044 00045 inline message():err(none){}; 00046 00047 private: 00048 // we should not be copying these should we? 00049 message& operator = ( const message& m ); 00050 // we should not be copying these should we? 00051 message( const message& ); 00052 }; 00053 00054 00055 } } 00056 00057 #endif // _MACE_RPC_MESSAGE_HPP_