MACE  1.0.0
 All Classes Namespaces Files Functions Variables Enumerations Defines
libs/rpc/include/mace/rpc/message.hpp
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_