mod error;
mod execution;
mod response;
mod workspace;
pub use error::ClientExecutionError;
pub use response::{CheckedDecodeError, ClientResponse, ClientResponseKind};
pub use workspace::{
ClientWorkspace, ClientWorkspaceLease, ClientWorkspacePool, MAX_CLIENT_WORKSPACE_LEASES,
WorkspaceAcquireError, WorkspacePoolError,
};
use core::fmt;
use crate::operation::PrepareOperation;
type ClientResult<R, P, T, D> = Result<R, ClientExecutionError<P, T, D>>;
pub trait ClientOperation: PrepareOperation {
type Output;
type DecodeError;
fn decode_response(
&self,
response: ClientResponse<'_, '_>,
) -> Result<Self::Output, Self::DecodeError>;
}
pub struct ClientKernel<T> {
transport: T,
}
impl<T> ClientKernel<T> {
#[must_use]
pub const fn new(transport: T) -> Self {
Self { transport }
}
#[must_use]
pub const fn transport(&self) -> &T {
&self.transport
}
#[must_use]
pub fn into_transport(self) -> T {
self.transport
}
}
impl<T> fmt::Debug for ClientKernel<T> {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
formatter
.debug_struct("ClientKernel")
.field("transport", &"[bound]")
.finish()
}
}
#[cfg(test)]
mod tests;