xet_client/cas_client/
interface.rs1use bytes::Bytes;
2use xet_core_structures::merklehash::MerkleHash;
3use xet_core_structures::metadata_shard::file_structs::MDBFileInfo;
4use xet_core_structures::xorb_object::SerializedXorbObject;
5
6use super::adaptive_concurrency::ConnectionPermit;
7use super::progress_tracked_streams::ProgressCallback;
8use crate::cas_types::{
9 BatchQueryReconstructionResponse, FileChunkHashesResponse, FileRange, HttpRange, QueryReconstructionResponseV2,
10};
11use crate::error::Result;
12
13#[cfg_attr(not(target_family = "wasm"), async_trait::async_trait)]
14#[cfg_attr(target_family = "wasm", async_trait::async_trait(?Send))]
15pub trait URLProvider: Send + Sync {
16 async fn retrieve_url(&self) -> Result<(String, Vec<HttpRange>)>;
20
21 async fn refresh_url(&self) -> Result<()>;
23}
24
25#[cfg_attr(not(target_family = "wasm"), async_trait::async_trait)]
31#[cfg_attr(target_family = "wasm", async_trait::async_trait(?Send))]
32pub trait Client: Send + Sync {
33 async fn get_file_reconstruction_info(
34 &self,
35 file_hash: &MerkleHash,
36 ) -> Result<Option<(MDBFileInfo, Option<MerkleHash>)>>;
37
38 async fn get_reconstruction(
41 &self,
42 file_id: &MerkleHash,
43 bytes_range: Option<FileRange>,
44 ) -> Result<Option<QueryReconstructionResponseV2>>;
45
46 async fn batch_get_reconstruction(&self, file_ids: &[MerkleHash]) -> Result<BatchQueryReconstructionResponse>;
47
48 async fn acquire_download_permit(&self) -> Result<ConnectionPermit>;
49
50 async fn get_file_term_data(
53 &self,
54 url_info: Box<dyn URLProvider>,
55 download_permit: ConnectionPermit,
56 progress_callback: Option<ProgressCallback>,
57 uncompressed_size_if_known: Option<usize>,
58 ) -> Result<(Bytes, Vec<u32>)>;
59
60 async fn query_for_global_dedup_shard(&self, prefix: &str, chunk_hash: &MerkleHash) -> Result<Option<Bytes>>;
61
62 async fn acquire_upload_permit(&self) -> Result<ConnectionPermit>;
64
65 async fn upload_shard(&self, shard_data: bytes::Bytes, upload_permit: ConnectionPermit) -> Result<bool>;
67
68 async fn upload_xorb(
70 &self,
71 prefix: &str,
72 serialized_xorb_object: SerializedXorbObject,
73 progress_callback: Option<ProgressCallback>,
74 upload_permit: ConnectionPermit,
75 ) -> Result<u64>;
76
77 async fn get_file_chunk_hashes(
85 &self,
86 file_id: &MerkleHash,
87 dirty_ranges: Vec<FileRange>,
88 ) -> Result<FileChunkHashesResponse>;
89}