use std::error::Error;
use std::fmt::Debug;
use std::hash::Hash;
pub trait TransformAttempt: Send + Sync + Clone {
type TransformRequestIdentifier: Eq + Clone + Hash + Send + Sync + Debug;
type Identifier: Eq
+ Clone
+ Hash
+ Send
+ Sync
+ Debug
+ Into<Self::TransformRequestIdentifier>;
type CallCtx: Send;
type CallArgsType: Send;
type ReturnCtx: Send + Sync + Clone;
type ReturnType: Send + Sync + Clone;
type TransformError: Send + Sync + Clone + Error;
type SendPackage = (Self::Identifier, Self::CallCtx, Self::CallArgsType);
type ReturnPackage: Send + Sync + Clone = (
Self::Identifier,
Self::ReturnCtx,
Result<Self::ReturnType, Self::TransformError>,
);
fn request_id(&self) -> Self::TransformRequestIdentifier;
fn attempt_id(&self) -> Self::Identifier;
fn new(
attempt_id: Self::Identifier,
call_ctx: Self::CallCtx,
call_val: Self::CallArgsType,
) -> Self;
fn set_return_package(&mut self, return_pkg: Self::ReturnPackage);
fn from_return_package(
attempt_id: Self::Identifier,
return_package: Self::ReturnPackage,
) -> Self;
}
#[cfg(test)]
#[derive(Clone, serde::Serialize, serde::Deserialize)]
pub struct NilTA;
#[cfg(test)]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct NilTAError;
#[cfg(test)]
impl std::fmt::Display for NilTAError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "NilTAError: This is a placeholder error for NilTA")
}
}
#[cfg(test)]
impl std::error::Error for NilTAError {}
#[cfg(test)]
impl TransformAttempt for NilTA {
type CallArgsType = ();
type CallCtx = ();
type Identifier = ();
type ReturnCtx = ();
type ReturnPackage = (
Self::Identifier,
Self::ReturnCtx,
Result<Self::ReturnType, Self::TransformError>,
);
type ReturnType = ();
type SendPackage = (Self::Identifier, Self::CallCtx, Self::CallArgsType);
type TransformError = NilTAError;
type TransformRequestIdentifier = ();
fn request_id(&self) -> Self::TransformRequestIdentifier { () }
fn attempt_id(&self) -> Self::Identifier { () }
fn new(
_attempt_id: Self::Identifier,
_call_ctx: Self::CallCtx,
_call_val: Self::CallArgsType,
) -> Self {
NilTA
}
fn set_return_package(&mut self, _return_pkg: Self::ReturnPackage) {}
fn from_return_package(
_attempt_id: Self::Identifier,
_return_package: Self::ReturnPackage,
) -> Self {
NilTA
}
}