Files
drop/torrential/src/conversions.rs
T
2026-02-05 12:00:25 +11:00

38 lines
1.4 KiB
Rust

use crate::proto::version::version_response::Manifest;
fn fixed_length<T, const N: usize>(v: Vec<T>) -> [T; N] {
v.try_into()
.unwrap_or_else(|v: Vec<T>| panic!("Expected a Vec of length {} but it was {}", N, v.len()))
}
pub fn convert_protobuf_manifest(source: Manifest) -> droplet_rs::manifest::Manifest {
droplet_rs::manifest::Manifest {
version: source.version,
chunks: source
.chunks
.into_iter()
.map(|(id, chunk_data)| {
(
id,
droplet_rs::manifest::ChunkData {
files: chunk_data
.files
.into_iter()
.map(|file_entry| droplet_rs::manifest::FileEntry {
filename: file_entry.filename,
start: file_entry.start.try_into().unwrap(),
length: file_entry.length.try_into().unwrap(),
permissions: file_entry.permissions,
})
.collect(),
checksum: chunk_data.checksum,
iv: fixed_length(chunk_data.iv),
},
)
})
.collect(),
size: source.size,
key: fixed_length(source.key),
}
}