pliantdb-server 0.1.0-dev-2

Database server for PliantDB.
Documentation
use async_trait::async_trait;
use tokio::{
    fs,
    io::{self, AsyncReadExt, AsyncWriteExt},
};

#[async_trait]
pub trait FileExt {
    async fn read_all(self) -> Result<Vec<u8>, io::Error>;
    async fn write_all(self, data: &[u8]) -> Result<(), io::Error>;
}

#[async_trait]
impl FileExt for fs::File {
    async fn read_all(mut self) -> Result<Vec<u8>, io::Error> {
        let mut buffer = Vec::new();
        self.read_to_end(&mut buffer).await?;
        Ok(buffer)
    }

    async fn write_all(mut self, data: &[u8]) -> Result<(), io::Error> {
        (&mut self).write_all(data).await?;
        self.shutdown().await?;
        Ok(())
    }
}