#base64-url #base64 #16-bit #64-bit #encoded-string

不使用std base64id-core

高效地将64位、32位和16位整数表示为base64url字符串

1 个不稳定版本

0.4.0-alpha.02023年11月17日

#5 in #base64-url


base64id-derive 中使用

MIT/Apache

40KB
911

base64id-core

此crate包含base64id-rs的核心库代码。您不应直接使用此crate。请参阅此处

许可证

许可协议为以下之一:

任选其一。

贡献

除非您明确声明,否则您提交给工作的任何贡献,根据Apache-2.0许可证的定义,应按上述方式双重许可,没有任何额外的条款或条件。


lib.rs:

此crate允许将固定长度的64位、32位和16位整数表示为base64url编码的字符串。这在Web环境下交换唯一标识符非常有用;例如,尽可能少地发送SQL主键到客户端。

默认情况下,此crate是#![no_std]。您可以使用std cargo功能标志来启用标准库支持。

快速入门

将以下内容添加到您的Cargo.toml文件中。

[dependencies]
base64id = { version = "0.3", features = ["std", "rand"] }

编码

您可以使用rand功能标志生成一个随机ID,如下所示。

use base64id_core::Id64;

fn main() {
    let id: Id64 = rand::random();
    println!("{id}"); // 3Zohppb9XMw
}

解码

您可以使用它的FromStr实现将字符串解码为Id64

use std::str::FromStr;
use base64id_core::{Error, Id64};

fn main() -> Result<(), Error> {
    let id = Id64::from_str("AAAAAAAAAAE")?;
    assert_eq!(id, Id64::from(1u64));
    Ok(())
}

有关解码错误,请参阅[Error]枚举。

Serde

您可以使用serde功能标志从Id64Id32Id16中派生SerializeDeserialize

示例

将json字符串反序列化为Id32

let id: Id32 = serde_json::from_str(r#""CyRWFA""#)?;
assert_eq!(id, Id32::from(186930708));

序列化包含 Id64 的结构体

#[derive(Serialize)]
struct Record {
    pub id: Id64,
}

let record = Record { id: Id64::from(5869384017340884593i64) };

assert_eq!(
    serde_json::to_string(&record)?,
    r#"{"id":"UXQ9qpv1ZnE"}"#
);

SQLx

您可以使用 sqlx 特性标志从 Id64Id32Id16 推导出 TypeFromRow
这将允许您在不进行手动类型转换的情况下,向任何 SQLx 支持的数据库添加、更新或查询值。

值将根据其 i64i32i16 表示形式转换为 SQL 数据类型。

开发中的随机值

从命令行,您可以快速生成自己的随机值,以及相应的有符号和无符号整数。

cargo run --example random_sample ([64|32|16])

警告! 此命令的输出可能不稳定,可能会随时更改。

依赖项

~0–10MB
~107K SLoC