histdb-rs 2.0.1

Better history management for zsh. Based on ideas from [https://github.com/larkery/zsh-histdb](https://github.com/larkery/zsh-histdb).
use crate::message::Message;
use std::{
    os::unix::net::UnixDatagram,
    path::PathBuf,
};
use thiserror::Error;

#[derive(Debug)]
pub struct Client {
    socket_path: PathBuf,
}

#[derive(Error, Debug)]
pub enum Error {
    #[error("can not create socket: {0}")]
    CreateSocket(std::io::Error),

    #[error("can not connect socket: {0}")]
    ConnectSocket(std::io::Error),

    #[error("can not serialize message: {0}")]
    SerializeMessage(bincode::Error),

    #[error("can not send message to socket: {0}")]
    SendMessage(std::io::Error),
}

pub const fn new(socket_path: PathBuf) -> Client {
    Client { socket_path }
}

impl Client {
    pub fn send(&self, message: &Message) -> Result<(), Error> {
        let socket = UnixDatagram::unbound().map_err(Error::CreateSocket)?;

        socket
            .connect(&self.socket_path)
            .map_err(Error::ConnectSocket)?;

        socket
            .send(&bincode::serialize(&message).map_err(Error::SerializeMessage)?)
            .map_err(Error::SendMessage)?;

        Ok(())
    }
}