Qiniu-Etag

qiniu-etag Run Test Cases GitHub release MIT licensed

概览

负责根据输入的数据计算七牛 Etag,适配 V1 和 V2 版本,同时提供阻塞接口和异步接口(异步接口需要启用 async 功能)

七牛 Etag 文档:https://developer.qiniu.com/kodo/1231/appendix

安装

不启用异步接口

toml [dependencies] qiniu-etag = "0.0.5"

启用异步接口

toml [dependencies] qiniu-etag = { version = "0.0.5", features = ["async"] }

代码示例

阻塞代码示例

Etag V1 计算示例

```rust use qiniu_etag::{EtagV1, prelude::*};

let mut etagv1 = EtagV1::new(); etagv1.update(b"etag"); asserteq!(etagv1.finalizefixed().asslice(), b"FpLiADEaVoALPkdb8tJEJyRTXoe_"); ```

Etag V1 计算输入流示例

```rust use std::io::{copy, Cursor}; use qiniu_etag::{EtagV1, prelude::*};

let mut etagv1 = EtagV1::new(); copy(&mut Cursor::new(b"etag"), &mut etagv1)?; asserteq!(etagv1.finalizefixed().asslice(), b"FpLiADEaVoALPkdb8tJEJyRTXoe_"); ```

Etag V2 计算示例

```rust use qiniu_etag::{EtagV2, prelude::*};

let mut etagv2 = EtagV2::new(); etagv2.update(b"hello"); etagv2.update(b"world"); asserteq!(etagv2.finalizefixed().as_slice(), b"ns56DcSIfBFUENXjdhsJTIvl3Rcu"); ```

Etag V2 计算输入流示例

与 V1 不同的是,Etag V2 要求传入数据的分块方式

```rust use qiniuetag::etagwith_parts; use std::io::Cursor;

asserteq!( etagwithparts( &mut Cursor::new(dataof_size(9 << 20)), &[1 << 22, 1 << 22, 1 << 20] )?, "ljgVjMtyMsOgIySv79U8Qz4TrUO4", ); ```

异步代码示例

Etag V1 计算输入流示例

```rust use futures::io::{copy, Cursor}; use qiniu_etag::{EtagV1, prelude::*};

let mut etagv1 = EtagV1::new(); copy(&mut Cursor::new(b"etag"), &mut etagv1).await?; asserteq!(etagv1.finalizefixed().asslice(), b"FpLiADEaVoALPkdb8tJEJyRTXoe_"); ```

Etag V2 计算输入流示例

```rust use qiniuetag::asyncetag_of; use futures::io::Cursor;

asserteq!( asyncetagof( &mut Cursor::new(dataof_size(9 << 20)), &[1 << 22, 1 << 22, 1 << 20] ).await?, "ljgVjMtyMsOgIySv79U8Qz4TrUO4", ); ```

最低支持的 Rust 版本(MSRV)

1.56.0

联系我们

代码许可

This project is licensed under the [MIT license].