use std::future::Future;
use candid::CandidType;
use candid::utils::ArgumentEncoder;
use serde::de::DeserializeOwned;
use crate::CanisterClientResult;
pub trait CanisterClient: Send + Clone {
fn update<T, R>(
&self,
method: &str,
args: T,
) -> impl Future<Output = CanisterClientResult<R>> + Send
where
T: ArgumentEncoder + Send + Sync,
R: DeserializeOwned + CandidType + Send;
fn query<T, R>(
&self,
method: &str,
args: T,
) -> impl Future<Output = CanisterClientResult<R>> + Send
where
T: ArgumentEncoder + Send + Sync,
R: DeserializeOwned + CandidType + Send;
}