use super::asked::Asked;
use super::call::CallError;
use serde::Serialize;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "kebab-case")]
pub enum BlobListSource {
Bus,
RegistryDirs,
Union,
}
#[derive(Debug, Clone, Serialize)]
pub struct BlobTierRow {
pub producer: String,
pub registry_version: String,
pub tier: String,
pub known_tier: bool,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub endpoints: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub algo: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reference: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub encoding: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub since: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Asked::is_not_asked", default)]
pub origins: Asked<Vec<String>>,
}
#[derive(Debug, Clone, Serialize)]
pub struct BlobList {
pub tiers: Vec<BlobTierRow>,
pub source: BlobListSource,
pub slices_considered: usize,
pub slices_without_blob: usize,
}
#[derive(Debug, Clone, Serialize)]
pub struct BlobAvailability {
pub chunk_count: u32,
pub have: u32,
pub complete: bool,
}
#[derive(Debug, Clone, Serialize)]
pub struct BlobManifest {
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub filename: Option<String>,
pub total_len: u64,
pub chunk_size: u32,
pub chunk_count: u32,
pub root: String,
pub created_ms: i64,
}
#[derive(Debug, Clone, Serialize)]
pub struct BlobHolder {
pub origin: String,
pub key: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub availability: Option<BlobAvailability>,
#[serde(skip_serializing_if = "Option::is_none")]
pub manifest: Option<BlobManifest>,
#[serde(skip_serializing_if = "Option::is_none")]
pub note: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub unreadable: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<CallError>,
}
#[derive(Debug, Clone, Serialize)]
pub struct BlobProbeReport {
pub target: String,
pub tier: String,
pub asked: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub not_probed: Option<String>,
pub holders: Vec<BlobHolder>,
pub answered: usize,
pub roots: Vec<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub declared_by: Vec<String>,
pub slices_considered: usize,
}
#[derive(Debug, Clone, Serialize)]
#[serde(tag = "event", rename_all = "kebab-case")]
pub enum BlobProgress {
Started {
total_len: u64,
chunk_count: u32,
},
Resumed {
received: u32,
total: u32,
},
Chunk {
index: u32,
received: u32,
total: u32,
bytes_received: u64,
},
Verifying,
Completed {
path: String,
},
Cancelled {
received: u32,
total: u32,
},
Failed {
error: String,
},
}
#[derive(Debug, Clone, Serialize)]
pub struct BlobFetchReport {
pub origin: String,
pub key: String,
pub dest: String,
pub bytes: u64,
pub chunks: u32,
pub chunks_resumed: u32,
pub rejected: u32,
pub retries: u32,
pub elapsed_ms: u64,
pub root: String,
pub root_pinned: bool,
pub priority: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct BlobTreeIndexReport {
pub origin: String,
pub key: String,
pub root: String,
pub entries: usize,
pub files: usize,
pub total_size: u64,
pub chunks: usize,
pub elapsed_ms: u64,
pub priority: String,
}