use std::result::Result;
use async_trait::async_trait;
use xet_core_structures::merklehash::MerkleHash;
use xet_core_structures::metadata_shard::file_structs::FileDataSequenceEntry;
use super::RawXorbData;
use crate::progress_tracking::upload_tracking::FileXorbDependency;
#[cfg_attr(not(target_family = "wasm"), async_trait)]
#[cfg_attr(target_family = "wasm", async_trait(?Send))]
pub trait DeduplicationDataInterface: Send + Sync + 'static {
type ErrorType;
async fn chunk_hash_dedup_query(
&self,
query_hashes: &[MerkleHash],
) -> std::result::Result<Option<(usize, FileDataSequenceEntry, bool)>, Self::ErrorType>;
async fn register_global_dedup_query(&mut self, _chunk_hash: MerkleHash) -> Result<(), Self::ErrorType>;
async fn complete_global_dedup_queries(&mut self) -> Result<bool, Self::ErrorType>;
async fn register_new_xorb(&mut self, xorb: RawXorbData) -> Result<(), Self::ErrorType>;
async fn register_xorb_dependencies(&mut self, dependencies: &[FileXorbDependency]);
}