1mod error;
4mod execution;
5mod response;
6mod workspace;
7
8pub use error::ClientExecutionError;
9pub use response::{CheckedDecodeError, ClientResponse, ClientResponseKind};
10pub use workspace::{
11 ClientWorkspace, ClientWorkspaceLease, ClientWorkspacePool, MAX_CLIENT_WORKSPACE_LEASES,
12 WorkspaceAcquireError, WorkspacePoolError,
13};
14
15use core::fmt;
16
17use crate::operation::PrepareOperation;
18
19type ClientResult<R, P, T, D> = Result<R, ClientExecutionError<P, T, D>>;
20
21pub trait ClientOperation: PrepareOperation {
27 type Output;
29 type DecodeError;
31
32 fn decode_response(
34 &self,
35 response: ClientResponse<'_, '_>,
36 ) -> Result<Self::Output, Self::DecodeError>;
37}
38
39pub struct ClientKernel<T> {
45 transport: T,
46}
47
48impl<T> ClientKernel<T> {
49 #[must_use]
51 pub const fn new(transport: T) -> Self {
52 Self { transport }
53 }
54
55 #[must_use]
57 pub const fn transport(&self) -> &T {
58 &self.transport
59 }
60
61 #[must_use]
63 pub fn into_transport(self) -> T {
64 self.transport
65 }
66}
67
68impl<T> fmt::Debug for ClientKernel<T> {
69 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
70 formatter
71 .debug_struct("ClientKernel")
72 .field("transport", &"[bound]")
73 .finish()
74 }
75}
76
77#[cfg(test)]
78mod tests;