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