use async_trait::async_trait;
use bytes::Bytes;
use xet_core_structures::merklehash::MerkleHash;
use crate::error::Result;
#[cfg_attr(not(target_family = "wasm"), async_trait)]
#[cfg_attr(target_family = "wasm", async_trait(?Send))]
pub trait DeletionControlableClient: Send + Sync {
async fn list_shard_entries(&self) -> Result<Vec<MerkleHash>>;
async fn get_shard_bytes(&self, hash: &MerkleHash) -> Result<Bytes>;
async fn delete_shard_entry(&self, hash: &MerkleHash) -> Result<()>;
async fn list_file_shard_entries(&self) -> Result<Vec<(MerkleHash, MerkleHash)>>;
async fn delete_file_entry(&self, file_hash: &MerkleHash) -> Result<()>;
async fn remove_shard_dedup_entries(&self, shard_hash: &MerkleHash) -> Result<()>;
async fn verify_integrity(&self) -> Result<()>;
async fn verify_all_reachable(&self) -> Result<()>;
}