use core::{
fmt,
ops::{Add, AddAssign},
};
use serde::{de::DeserializeOwned, Deserialize, Serialize};
#[derive(Debug, Copy, Clone, Default, PartialEq, Eq, PartialOrd, Ord)]
pub struct MethodId(usize);
impl From<usize> for MethodId {
fn from(id: usize) -> Self {
Self(id)
}
}
impl Add<usize> for MethodId {
type Output = Self;
fn add(self, rhs: usize) -> Self::Output {
Self(self.0 + rhs)
}
}
impl AddAssign<usize> for MethodId {
fn add_assign(&mut self, rhs: usize) {
self.0 += rhs;
}
}
pub trait RpcSend: Serialize + Clone + fmt::Debug + Send + Sync + Unpin {}
impl<T> RpcSend for T where T: Serialize + Clone + fmt::Debug + Send + Sync + Unpin {}
pub trait RpcRecv: DeserializeOwned + fmt::Debug + Send + Sync + Unpin + 'static {}
impl<T> RpcRecv for T where T: DeserializeOwned + fmt::Debug + Send + Sync + Unpin + 'static {}
pub trait RpcBorrow<'de>: Deserialize<'de> + fmt::Debug + Send + Sync + Unpin {}
impl<'de, T> RpcBorrow<'de> for T where T: Deserialize<'de> + fmt::Debug + Send + Sync + Unpin {}
pub trait RpcObject: RpcSend + RpcRecv {}
impl<T> RpcObject for T where T: RpcSend + RpcRecv {}
pub trait BorrowedRpcObject<'de>: RpcBorrow<'de> + RpcSend {}
impl<'de, T> BorrowedRpcObject<'de> for T where T: RpcBorrow<'de> + RpcSend {}