pub trait GenServer{
type CallMsg: Clone + Send + Sized;
type CastMsg: Clone + Send + Sized;
type OutMsg: Send + Sized;
type State: Clone + Send;
type Error: Debug;
// Provided methods
fn new() -> Self { ... }
fn start(initial_state: Self::State) -> GenServerHandle<Self> { ... }
fn start_blocking(initial_state: Self::State) -> GenServerHandle<Self> { ... }
fn run(
&mut self,
handle: &GenServerHandle<Self>,
rx: &mut Receiver<GenServerInMsg<Self>>,
state: Self::State,
) -> Result<(), GenServerError> { ... }
fn init(
&mut self,
_handle: &GenServerHandle<Self>,
state: Self::State,
) -> Result<Self::State, Self::Error> { ... }
fn main_loop(
&mut self,
handle: &GenServerHandle<Self>,
rx: &mut Receiver<GenServerInMsg<Self>>,
state: Self::State,
) -> Result<(), GenServerError> { ... }
fn receive(
&mut self,
handle: &GenServerHandle<Self>,
rx: &mut Receiver<GenServerInMsg<Self>>,
state: Self::State,
) -> Result<(Self::State, bool), GenServerError> { ... }
fn handle_call(
&mut self,
_message: Self::CallMsg,
_handle: &GenServerHandle<Self>,
_state: Self::State,
) -> CallResponse<Self> { ... }
fn handle_cast(
&mut self,
_message: Self::CastMsg,
_handle: &GenServerHandle<Self>,
_state: Self::State,
) -> CastResponse<Self> { ... }
}Required Associated Types§
type CallMsg: Clone + Send + Sized
type CastMsg: Clone + Send + Sized
type OutMsg: Send + Sized
type State: Clone + Send
type Error: Debug
Provided Methods§
fn new() -> Self
fn start(initial_state: Self::State) -> GenServerHandle<Self>
Sourcefn start_blocking(initial_state: Self::State) -> GenServerHandle<Self>
fn start_blocking(initial_state: Self::State) -> GenServerHandle<Self>
We copy the same interface as tasks, but all threads can work while blocking by default
fn run( &mut self, handle: &GenServerHandle<Self>, rx: &mut Receiver<GenServerInMsg<Self>>, state: Self::State, ) -> Result<(), GenServerError>
Sourcefn init(
&mut self,
_handle: &GenServerHandle<Self>,
state: Self::State,
) -> Result<Self::State, Self::Error>
fn init( &mut self, _handle: &GenServerHandle<Self>, state: Self::State, ) -> Result<Self::State, Self::Error>
Initialization function. It’s called before main loop. It can be overrided on implementations in case initial steps are required.
fn main_loop( &mut self, handle: &GenServerHandle<Self>, rx: &mut Receiver<GenServerInMsg<Self>>, state: Self::State, ) -> Result<(), GenServerError>
fn receive( &mut self, handle: &GenServerHandle<Self>, rx: &mut Receiver<GenServerInMsg<Self>>, state: Self::State, ) -> Result<(Self::State, bool), GenServerError>
fn handle_call( &mut self, _message: Self::CallMsg, _handle: &GenServerHandle<Self>, _state: Self::State, ) -> CallResponse<Self>
fn handle_cast( &mut self, _message: Self::CastMsg, _handle: &GenServerHandle<Self>, _state: Self::State, ) -> CastResponse<Self>
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.