mod aio;
mod async_server;
mod connection_handler;
mod macros;
mod message_handler;
mod state;
mod traits;
pub use aio::{RReader, RWriter, TReader, TWriter};
pub use traits::{File, FileError, FileResult, Filesystem, OpenFile};
use crate::raw::{RError, TError};
pub use async_server::{AsyncServer, AsyncServerBuilder, Context};
pub use connection_handler::{MessageContext, connection_handler};
pub use message_handler::message_handler;
pub use state::{
FileHandle, FileHandles, FileHandlesError, Request, Requests, RequestsError, Session,
};
type JoinSet = tokio::task::JoinSet<()>;
type Result<RetT> = std::result::Result<RetT, ServerError>;
#[derive(Debug)]
pub enum ServerError {
FailedToNegotiate,
NoSuchFilesystem,
IoError(std::io::Error),
TError(TError),
RError(RError),
RequestsError(RequestsError),
FileHandlesError(FileHandlesError),
FileError(FileError),
}
impl From<FileError> for ServerError {
fn from(fe: FileError) -> Self {
Self::FileError(fe)
}
}
impl From<RequestsError> for ServerError {
fn from(re: RequestsError) -> Self {
Self::RequestsError(re)
}
}
impl From<FileHandlesError> for ServerError {
fn from(fhe: FileHandlesError) -> Self {
Self::FileHandlesError(fhe)
}
}
impl From<TError> for ServerError {
fn from(te: TError) -> Self {
match te {
TError::IoError(ioe) => ioe.into(),
_ => Self::TError(te),
}
}
}
impl From<RError> for ServerError {
fn from(re: RError) -> Self {
match re {
RError::IoError(ioe) => ioe.into(),
_ => Self::RError(re),
}
}
}
impl From<std::io::Error> for ServerError {
fn from(ioe: std::io::Error) -> Self {
Self::IoError(ioe)
}
}