pub trait GenServer:
Send
+ Sized
+ Clone {
type CallMsg: Clone + Send + Sized;
type CastMsg: Clone + Send + Sized;
type OutMsg: Send + Sized;
type Error: Debug;
// Provided methods
fn start(self) -> GenServerHandle<Self> { ... }
fn start_blocking(self) -> GenServerHandle<Self> { ... }
fn run(
self,
handle: &GenServerHandle<Self>,
rx: &mut Receiver<GenServerInMsg<Self>>,
) -> Result<(), GenServerError> { ... }
fn init(self, _handle: &GenServerHandle<Self>) -> Result<Self, Self::Error> { ... }
fn main_loop(
self,
handle: &GenServerHandle<Self>,
rx: &mut Receiver<GenServerInMsg<Self>>,
) -> Result<(), GenServerError> { ... }
fn receive(
self,
handle: &GenServerHandle<Self>,
rx: &mut Receiver<GenServerInMsg<Self>>,
) -> Result<(Self, bool), GenServerError> { ... }
fn handle_call(
self,
_message: Self::CallMsg,
_handle: &GenServerHandle<Self>,
) -> CallResponse<Self> { ... }
fn handle_cast(
self,
_message: Self::CastMsg,
_handle: &GenServerHandle<Self>,
) -> CastResponse<Self> { ... }
}Required Associated Types§
type CallMsg: Clone + Send + Sized
type CastMsg: Clone + Send + Sized
type OutMsg: Send + Sized
type Error: Debug
Provided Methods§
fn start(self) -> GenServerHandle<Self>
Sourcefn start_blocking(self) -> GenServerHandle<Self>
fn start_blocking(self) -> GenServerHandle<Self>
We copy the same interface as tasks, but all threads can work while blocking by default
fn run( self, handle: &GenServerHandle<Self>, rx: &mut Receiver<GenServerInMsg<Self>>, ) -> Result<(), GenServerError>
Sourcefn init(self, _handle: &GenServerHandle<Self>) -> Result<Self, Self::Error>
fn init(self, _handle: &GenServerHandle<Self>) -> Result<Self, 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( self, handle: &GenServerHandle<Self>, rx: &mut Receiver<GenServerInMsg<Self>>, ) -> Result<(), GenServerError>
fn receive( self, handle: &GenServerHandle<Self>, rx: &mut Receiver<GenServerInMsg<Self>>, ) -> Result<(Self, bool), GenServerError>
fn handle_call( self, _message: Self::CallMsg, _handle: &GenServerHandle<Self>, ) -> CallResponse<Self>
fn handle_cast( self, _message: Self::CastMsg, _handle: &GenServerHandle<Self>, ) -> 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.