1mod error;
4mod execution;
5mod profile;
6mod response;
7mod workspace;
8
9pub use error::ClientExecutionError;
10#[cfg(feature = "alloc")]
11pub use profile::OwnedClientWorkspace;
12pub use profile::{ClientCapacityError, ClientCapacityProfile};
13pub use response::{CheckedDecodeError, ClientResponse, ClientResponseKind};
14pub use workspace::{
15 ClientWorkspace, ClientWorkspaceLease, ClientWorkspacePool, MAX_CLIENT_WORKSPACE_LEASES,
16 WorkspaceAcquireError, WorkspacePoolError,
17};
18
19use core::fmt;
20
21use crate::operation::PrepareOperation;
22
23type ClientResult<R, P, T, D> = Result<R, ClientExecutionError<P, T, D>>;
24
25pub trait ClientOperation: PrepareOperation {
31 type Output;
33 type DecodeError;
35
36 fn decode_response(
38 &self,
39 response: ClientResponse<'_, '_>,
40 ) -> Result<Self::Output, Self::DecodeError>;
41}
42
43pub struct ClientKernel<T> {
49 transport: T,
50}
51
52impl<T> ClientKernel<T> {
53 #[must_use]
55 pub const fn new(transport: T) -> Self {
56 Self { transport }
57 }
58
59 #[must_use]
61 pub const fn transport(&self) -> &T {
62 &self.transport
63 }
64
65 #[must_use]
67 pub fn into_transport(self) -> T {
68 self.transport
69 }
70}
71
72impl<T> fmt::Debug for ClientKernel<T> {
73 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
74 formatter
75 .debug_struct("ClientKernel")
76 .field("transport", &"[bound]")
77 .finish()
78 }
79}
80
81#[cfg(test)]
82mod tests;