diff --git a/src/tarantool.rs b/src/tarantool.rs index c5a2228135e5f51a16e2c26b5b00d34ce4719709..a16377451b01e75959cb59ce11e220ce7489a5e6 100644 --- a/src/tarantool.rs +++ b/src/tarantool.rs @@ -26,7 +26,7 @@ macro_rules! stringify_cfunc { use ::tarantool::tuple::FunctionCtx; use libc::c_int; - let _: unsafe extern "C" fn(FunctionCtx, FunctionArgs) -> c_int = $($func_name)+; + const _: unsafe extern "C" fn(FunctionCtx, FunctionArgs) -> c_int = $($func_name)+; concat!(".", $crate::stringify_last_token!($($func_name)+)) }}; } diff --git a/src/traft/mod.rs b/src/traft/mod.rs index 87f2d8e4e4285dde9ca96b897dcbd8fb0e9f2f87..00713a0f4b62250361d6e60439becd5380bc86ae 100644 --- a/src/traft/mod.rs +++ b/src/traft/mod.rs @@ -7,6 +7,7 @@ mod network; pub mod node; pub mod notify; mod raft_storage; +pub mod rpc; pub mod storage; pub mod topology; diff --git a/src/traft/rpc.rs b/src/traft/rpc.rs new file mode 100644 index 0000000000000000000000000000000000000000..daff7294854cb198255eb0c38c44b3187799c28a --- /dev/null +++ b/src/traft/rpc.rs @@ -0,0 +1,33 @@ +use ::tarantool::tuple::{DecodeOwned, Encode}; + +use std::fmt::Debug; + +/// Types implementing this trait represent an RPC's (remote procedure call) +/// arguments. This trait contains information about the request. +pub trait Request: Encode + DecodeOwned { + /// Remote procedure name. + const PROC_NAME: &'static str; + + /// Describes data returned from a successful RPC request. + type Response: Encode + DecodeOwned + Debug + 'static; +} + +impl Request for super::JoinRequest { + const PROC_NAME: &'static str = crate::stringify_cfunc!(super::node::raft_join); + type Response = super::JoinResponse; +} + +impl Request for super::UpdatePeerRequest { + const PROC_NAME: &'static str = crate::stringify_cfunc!(super::failover::raft_update_peer); + type Response = super::UpdatePeerResponse; +} + +impl Request for super::ExpelRequest { + const PROC_NAME: &'static str = crate::stringify_cfunc!(super::node::raft_expel); + type Response = super::ExpelResponse; +} + +impl Request for super::SyncRaftRequest { + const PROC_NAME: &'static str = crate::stringify_cfunc!(super::node::raft_sync_raft); + type Response = (); +}