Trait GenServer

Source
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§

Provided Methods§

Source

fn start(self) -> GenServerHandle<Self>

Source

fn start_blocking(self) -> GenServerHandle<Self>

We copy the same interface as tasks, but all threads can work while blocking by default

Source

fn run( self, handle: &GenServerHandle<Self>, rx: &mut Receiver<GenServerInMsg<Self>>, ) -> Result<(), GenServerError>

Source

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.

Source

fn main_loop( self, handle: &GenServerHandle<Self>, rx: &mut Receiver<GenServerInMsg<Self>>, ) -> Result<(), GenServerError>

Source

fn receive( self, handle: &GenServerHandle<Self>, rx: &mut Receiver<GenServerInMsg<Self>>, ) -> Result<(Self, bool), GenServerError>

Source

fn handle_call( self, _message: Self::CallMsg, _handle: &GenServerHandle<Self>, ) -> CallResponse<Self>

Source

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.

Implementors§