use async_trait::async_trait;
#[cfg(feature = "canister")]
use ex3_asset_vault_public_types::CandidWithdrawalConsensusReport;
use ex3_canister_client::{ActorResult, CanisterResult};
use ex3_node_types::chain::CandidChain;
#[cfg(feature = "canister")]
use ex3_node_types::{CandidBlockHeight, CanisterId, TransactionHash};
#[cfg(feature = "canister")]
pub mod canister_impl;
#[cfg(feature = "agent")]
pub mod client_impl;
#[cfg(feature = "mock")]
pub mod mock;
#[async_trait]
pub trait AssetVault: Send + Sync {
async fn get_deposit_address(&self, chain: CandidChain) -> CanisterResult<ActorResult<String>>;
#[cfg(feature = "canister")]
async fn update_gas_price(
&self,
gas_prices: Vec<(CandidChain, ex3_node_types::CandidAssetAmount)>,
) -> CanisterResult<ActorResult<()>>;
#[cfg(feature = "canister")]
async fn accept_new_balance_vault(
&self,
new_balance_vault_id: CanisterId,
) -> CanisterResult<ActorResult<()>>;
#[cfg(feature = "canister")]
async fn accept_withdrawal_consensus_report(
&self,
height: CandidBlockHeight,
report: CandidWithdrawalConsensusReport,
) -> CanisterResult<ActorResult<()>>;
#[cfg(feature = "canister")]
async fn accept_withdrawal_forward_report(
&self,
height: CandidBlockHeight,
report: ex3_balance_vault_public_types::AcceptedWithdrawalShardingSubReport,
) -> CanisterResult<ActorResult<()>>;
#[cfg(feature = "canister")]
async fn forward_force_withdrawal(
&self,
withdrawal: ex3_node_types::transaction::EncodedTransaction,
) -> CanisterResult<ActorResult<()>>;
#[cfg(feature = "canister")]
async fn notify_force_withdrawal_processed(
&self,
tx_hash: TransactionHash,
) -> CanisterResult<ActorResult<()>>;
}