#[cfg(feature = "native")]
mod native;
use crate::data::client::merkle::PaymentMode;
use ant_protocol::transport::{MultiAddr, PeerId};
use ant_protocol::XorName as ChunkAddress;
#[cfg(feature = "native")]
pub use native::{
ExternalChunkStore, ExternalPaymentInfo, FinalizeOutcome, FinalizeResume, MerkleFinalizeResume,
PreparedUpload, WaveFinalizeResume,
};
use self_encryption::DataMap;
#[derive(Debug, Clone)]
pub enum UploadEvent {
Encrypting { chunks_done: usize },
Encrypted { total_chunks: usize },
QuotingChunks {
wave: usize,
total_waves: usize,
chunks_in_wave: usize,
},
ChunkQuoted { quoted: usize, total: usize },
ChunkStored { stored: usize, total: usize },
}
#[derive(Debug, Clone)]
pub enum DownloadEvent {
ResolvingDataMap { total_map_chunks: usize },
MapChunkFetched { fetched: usize },
DataMapResolved { total_chunks: usize },
ChunksFetched { fetched: usize, total: usize },
}
#[derive(Debug, Clone)]
pub struct FileDownloadWithPeerReport {
pub bytes_written: u64,
pub chunk_reports: Vec<FileChunkPeerReport>,
}
#[derive(Debug, Clone)]
pub struct FileChunkPeerReport {
pub index: usize,
pub address: ChunkAddress,
pub sweeps: Vec<FileChunkPeerSweepReport>,
}
#[derive(Debug, Clone)]
pub struct FileChunkPeerSweepReport {
pub attempt: usize,
pub deferred_retry: bool,
pub error: Option<String>,
pub peers: Vec<FileChunkPeerReportPeer>,
}
#[derive(Debug, Clone)]
pub struct FileChunkPeerReportPeer {
pub peer_id: PeerId,
pub peer_addrs: Vec<MultiAddr>,
pub xor_distance: ChunkAddress,
pub status: FileChunkPeerStatus,
}
#[derive(Debug, Clone)]
pub enum FileChunkPeerStatus {
Found { bytes: usize },
NotFound,
Timeout { message: String },
NetworkError { message: String },
Error { message: String },
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum Visibility {
#[default]
Private,
Public,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum CostEstimateConfidence {
#[default]
PricedSample,
VerifiedAllAlreadyStored,
AllSamplesAlreadyStoredIncomplete,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[non_exhaustive]
pub struct UploadCostEstimate {
pub file_size: u64,
pub chunk_count: usize,
pub storage_cost_atto: String,
pub estimated_gas_cost_wei: String,
pub payment_mode: PaymentMode,
#[serde(default)]
pub confidence: CostEstimateConfidence,
}
#[derive(Debug, Clone)]
#[non_exhaustive]
pub struct FileUploadResult {
pub data_map: DataMap,
pub chunks_stored: usize,
pub chunks_failed: usize,
pub total_chunks: usize,
pub payment_mode_used: PaymentMode,
pub storage_cost_atto: String,
pub gas_cost_wei: u128,
pub data_map_address: Option<[u8; 32]>,
pub chunk_attempts_total: usize,
pub store_durations_ms: Vec<u64>,
pub retries_histogram: [usize; 4],
}