Crates.io | remozipsy |
lib.rs | remozipsy |
version | 0.1.0 |
created_at | 2025-04-19 19:45:06.426747+00 |
updated_at | 2025-06-24 07:20:56.987387+00 |
description | Remote Zip Sync - sync remote zip to local fs |
homepage | https://gitlab.com/xMAC94x/remozipsy |
repository | https://gitlab.com/xMAC94x/remozipsy |
max_upload_size | |
id | 1640912 |
size | 432,461 |
remozipsy is a crate enabling incremental, differential synchronization of zip files from a remote location. It avoids downloading the entire archive and instead fetches only updated parts (by using CRC matching). This optimizes download times over slow connections.
Use Cases:
RemoteZip
, FileSystem
) enabling custom storage backendsreqwest
and tokio::fs
Add the following dependency to your Cargo.toml
:
[dependencies]
remozipsy = "0.1.0"
See examples/sync_remote_zip.rs for a detailed example.
use remozipsy::{Config, Statemachine, reqwest::ReqwestRemoteZip, tokio::TokioLocalStorage};
#[tokio::main(flavor = "multi_thread", worker_threads = 4)]
pub async fn main() -> Result<(), Box<dyn std::error::Error>> {
let remote = ReqwestRemoteZip::with_url("https://getsamplefiles.com/download/zip/sample-1.zip")?;
let local = TokioLocalStorage::new("./extract", Vec::new());
let state = Statemachine::new(remote, local, Config::default());
while let Some((progress, next_state)) = state.progress().await {
state = next_state;
println!("Progress: {progress:?}");
tokio::task::yield_now().await;
}
Ok(())
}
statemachine.progress()
.remozipsy
worksRANGE
header to only fetch part of a ressource, luckily many webservers (and github releases) support this featureFor more details, see the documentation and explore examples.
Pull Requests welcome! Start by checking open issues or feature requests in our GitLab repo.