#file #delta #opinionated #bindings #signature #librsync #memory

librsync-ffi

针对 librsync 的有意见的绑定

1 个不稳定版本

0.1.0 2020年4月7日

#58 in #delta

GPL-2.0+

16KB
386 代码行

Rust FFI 绑定 librsync2

动态链接到 librsync2 / librsync-dev

功能

  • 整个文件 API
    • 生成签名
    • 将签名加载到内存
    • 创建差异
    • 将差异应用于文件
  • 流式 API
  • 错误处理

用法

文件 API

生成签名

签名存储在内存中,即使使用了整个文件 API。临时目录被用于保存值,直到它们在内存中初始化。

let path = PathBuf::from("some/file/location");
let (signature, stats) = Signature::new(&path).unwrap;

生成差异

差异文件是 rsync 差异文件的 Vec<u8> 表示。差异通过一个文件签名和一些新文件来计算

let path = PathBuf::from("some/file/location");
let (signature, stats) = Signature::new(&path).unwrap;

let some_new_path = PathBuf::from("the/file/changed/maybe");
let (delta, stats) = Delta::new(&mut signature, &some_new_path);

将差异应用于文件

let path = PathBuf::from("some/file/location");
let (signature, stats) = Signature::new(&path).unwrap;

let some_new_path = PathBuf::from("the/file/changed/maybe");
let (delta, stats) = Delta::new(&mut signature, &some_new_path);

// will output the value of the new file as a Vec<u8> 
let new_file = patch_file(&path, delta);

依赖

~1.6–10MB
~107K SLoC