use crate::proto::RpcAction;
use crate::{
Codec,
error::{EncodedErr, RpcErrCodec, RpcError, RpcIntErr},
};
use std::fmt;
use std::ops::DerefMut;
pub use razor_stream_macros::{client_task, client_task_enum};
pub trait ClientTask:
ClientTaskAction
+ ClientTaskEncode
+ ClientTaskDecode
+ ClientTaskDone
+ DerefMut<Target = ClientTaskCommon>
+ Send
+ Sized
+ 'static
+ fmt::Debug
+ Unpin
{
}
pub trait ClientTaskEncode {
fn encode_req<C: Codec>(&self, codec: &C, buf: &mut Vec<u8>) -> Result<usize, ()>;
#[inline(always)]
fn get_req_blob(&self) -> Option<&[u8]> {
None
}
}
pub trait ClientTaskDecode {
fn decode_resp<C: Codec>(&mut self, codec: &C, buf: &[u8]) -> Result<(), ()>;
#[inline(always)]
fn reserve_resp_blob(&mut self, _size: i32) -> Option<&mut [u8]> {
None
}
}
pub trait ClientTaskGetResult<E: RpcErrCodec> {
fn get_result(&self) -> Result<(), &RpcError<E>>;
}
pub trait ClientTaskDone: Sized + 'static {
fn set_custom_error<C: Codec>(
&mut self, codec: &C, e: EncodedErr, last_index: usize, conf_ver: u64,
);
fn set_rpc_error(&mut self, e: RpcIntErr);
fn set_ok(&mut self);
fn done(self);
}
pub trait ClientTaskAction {
fn get_action<'a>(&'a self) -> RpcAction<'a>;
}
#[derive(Debug, Default)]
pub struct ClientTaskCommon {
pub seq: u64,
}
impl ClientTaskCommon {
pub fn seq(&self) -> u64 {
self.seq
}
pub fn set_seq(&mut self, seq: u64) {
self.seq = seq;
}
}