use candid::utils::ArgumentEncoder;
use candid::CandidType;
use serde::de::DeserializeOwned;
use crate::CanisterClientResult;
#[async_trait::async_trait]
pub trait CanisterClient: Send + Clone {
async fn update<T, R>(&self, method: &str, args: T) -> CanisterClientResult<R>
where
T: ArgumentEncoder + Send + Sync,
R: DeserializeOwned + CandidType;
async fn query<T, R>(&self, method: &str, args: T) -> CanisterClientResult<R>
where
T: ArgumentEncoder + Send + Sync,
R: DeserializeOwned + CandidType;
}