simple-socket 0.1.7

The basic socket server & client for testing
Documentation
use std::io;
use std::net::SocketAddr;

use super::message::{Message, Response};
use crate::client::SocketClient;

pub use bincode::Result;
use serde::{de::DeserializeOwned, Serialize};

pub struct ActorClient<Req, Res>
where
    Self: Send + Sync,
    Req: Serialize + PartialEq + Eq + Send + Sync,
    Res: DeserializeOwned + PartialEq + Eq + Send + Sync,
{
    inner: SocketClient<Message<Req>, Response<Res>>,
}

impl<Req, Res> ActorClient<Req, Res>
where
    Self: Send + Sync,
    Req: Serialize + PartialEq + Eq + Send + Sync,
    Res: DeserializeOwned + PartialEq + Eq + Send + Sync,
{
    pub fn try_new(addr: SocketAddr) -> io::Result<Self> {
        Ok(Self {
            inner: SocketClient::try_new(addr)?,
        })
    }

    pub fn stop(self) -> Result<()> {
        self.inner.request(&Message::Stop).map(|_| ())
    }

    pub fn pause(&self) -> Result<()> {
        self.inner.request(&Message::Pause).map(|_| ())
    }

    pub fn resume(&self) -> Result<()> {
        self.inner.request(&Message::Resume).map(|_| ())
    }

    pub fn hibernate(&self) -> Result<()> {
        self.inner.request(&Message::Hibernate).map(|_| ())
    }

    pub fn wake_up(&self) -> Result<()> {
        self.inner.request(&Message::WakeUp).map(|_| ())
    }

    pub fn request(&self, message: Req) -> Result<Res> {
        self.inner
            .request(&Message::Custom(message))
            .map(|m| m.unwrap_custom())
    }
}