#qiniu #etag #storage #sdk #calculations #async #developer

yanked qiniu-etag

Qiniu Etag calculation SDK for Rust

10 releases

0.2.4 Dec 26, 2023
0.2.3 May 23, 2023
0.2.2 Dec 22, 2022
0.2.1 Nov 1, 2022
0.1.2 Jun 9, 2022

#610 in Cryptography

Download history 2/week @ 2024-07-25 9/week @ 2024-09-19 2/week @ 2024-09-26

77 downloads per month
Used in 2 crates (via qiniu-sdk)

MIT license

53KB
1K SLoC

Qiniu-Etag

qiniu-etag docs.rs Run Test Cases GitHub release MIT licensed

概览

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

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

安装

不启用异步接口

[dependencies]
qiniu-etag = "0.2.1"

启用异步接口

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

代码示例

阻塞代码示例

Etag V1 计算示例

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

let mut etag_v1 = EtagV1::new();
etag_v1.update(b"etag");
assert_eq!(etag_v1.finalize_fixed().as_slice(), b"FpLiADEaVoALPkdb8tJEJyRTXoe_");

Etag V1 计算输入流示例

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

let mut etag_v1 = EtagV1::new();
copy(&mut Cursor::new(b"etag"), &mut etag_v1)?;
assert_eq!(etag_v1.finalize_fixed().as_slice(), b"FpLiADEaVoALPkdb8tJEJyRTXoe_");

Etag V2 计算示例

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

let mut etag_v2 = EtagV2::new();
etag_v2.update(b"hello");
etag_v2.update(b"world");
assert_eq!(etag_v2.finalize_fixed().as_slice(), b"ns56DcSIfBFUENXjdhsJTIvl3Rcu");

Etag V2 计算输入流示例

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

use qiniu_etag::etag_with_parts;
use std::io::Cursor;

assert_eq!(
    etag_with_parts(
        &mut Cursor::new(data_of_size(9 << 20)),
        &[1 << 22, 1 << 22, 1 << 20]
    )?,
    "ljgVjMtyMsOgIySv79U8Qz4TrUO4",
);

异步代码示例

Etag V1 计算输入流示例

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

let mut etag_v1 = EtagV1::new();
copy(&mut Cursor::new(b"etag"), &mut etag_v1).await?;
assert_eq!(etag_v1.finalize_fixed().as_slice(), b"FpLiADEaVoALPkdb8tJEJyRTXoe_");

Etag V2 计算输入流示例

use qiniu_etag::async_etag_of;
use futures::io::Cursor;

assert_eq!(
    async_etag_of(
        &mut Cursor::new(data_of_size(9 << 20)),
        &[1 << 22, 1 << 22, 1 << 20]
    ).await?,
    "ljgVjMtyMsOgIySv79U8Qz4TrUO4",
);

最低支持的 Rust 版本(MSRV)

1.70.0

联系我们

  • 如果需要帮助,请提交工单(在portal右侧点击咨询和建议提交工单,或者直接向 support@qiniu.com 发送邮件)
  • 如果有什么问题,可以到问答社区提问,问答社区
  • 更详细的文档,见官方文档站
  • 如果发现了bug, 欢迎提交 Issue
  • 如果有功能需求,欢迎提交 Issue
  • 如果要提交代码,欢迎提交 Pull Request
  • 欢迎关注我们的微信 微博,及时获取动态信息。

代码许可

This project is licensed under the MIT license.

Dependencies

~0.7–1.1MB
~24K SLoC