2个版本

0.3.1 2022年9月7日
0.3.0 2021年11月1日
0.2.0 2021年10月25日
0.1.0 2021年10月24日

#71值格式化

每月27次下载

MIT/Apache

150KB
9K SLoC

englishid

无符号整数ID和任意数据的英文格式化。

englishid forbids unsafe code crate version Live Build Status Documentation for main branch

无符号整数的英文格式化。适用于以人类可读和可识别的格式编码大ID。使用基于由EFF创建的列表的修改过的单词列表

基本用法

可以从任何原始无符号整型类型生成ID

use englishid::EnglishId;

let english_id = EnglishId::from(42_u16).to_string().unwrap();
assert_eq!(english_id, "accept-abacus");

使用相应的解析方法提取编码的ID

let parsed = englishid::parse_u16("accept-abacus").unwrap();
assert_eq!(parsed, 42);

限制单词长度

使用的单词列表可以将52位信息编码到4个单词中。如果您希望将u64 ID限制为52位,可以设置使用的单词数量

use englishid::EnglishId;

let english_id = EnglishId::from(123456789_u64).words(4).to_string().unwrap();
assert_eq!(english_id, "haunt-subtitle-abandon-abacus");
assert_eq!(englishid::parse_u64(&english_id).unwrap(), 123456789_u64);

如果值超出了可接受的范围,将返回Error::ValueOutOfRange

编码/解码任意数据

此crate还提供函数,允许使用相同的单词列表编码任意字节数据。如果您始终知道数据大小,可以使用fixed_length函数

let payload = b"hello world";
let encoded = englishid::encode_fixed_length(payload);
assert_eq!(encoded, "hatchback-reissue-residual-overbuilt-ladybug-tusk-buffing");
assert_eq!(englishid::decode_fixed_length(&encoded, payload.len()).unwrap(), payload);

如果您正在编码不同长度的有效负载,并希望将长度编码到生成的englishid字符串中,encode()decode()将为您完成

let payload = b"hello world";
let encoded = englishid::encode(payload).unwrap();
assert_eq!(encoded, "able-hatchback-reissue-residual-overbuilt-ladybug-tusk-buffing");
assert_eq!(englishid::decode(&encoded).unwrap(), payload);

或者,如果您有一个可以对应于字节数的枚举,可以使用自定义头值

enum PrivateKey {
    Ed25519([u8; 32]),
    Ed448([u8; 56])
}

impl PrivateKey {
    fn as_bytes(&self) -> &[u8] {
        match self {
            Self::Ed25519(key) => key,
            Self::Ed448(key) => key,
        }
    }

    fn kind(&self) -> u16 {
        match self {
            Self::Ed25519(_) => 1,
            Self::Ed448(_) => 2,
        }
    }

    fn byte_length(kind: u16) -> usize {
        match kind {
            1 => 32,
            2 => 56,
            _ => 0,
        }
    }
}

let key = PrivateKey::Ed25519([0; 32]);
let encoded = englishid::encode_with_custom_header(key.as_bytes(), key.kind()).unwrap();
assert_eq!(englishid::decode_with_custom_header(&encoded, PrivateKey::byte_length).unwrap(), key.as_bytes());

数据编码的限制

使用fixed_length API进行编码时,没有编码数据的数量限制。

使用自动长度头或自定义头时,头中的值不能超过8190。此限制可能在未来被取消,但此crate不适用于大有效负载编码。

版本稳定性

此crate的维护者将把词汇表的更改视为语义版本控制中的重大更改。未来,此crate可能支持额外的词汇表,这将提供另一种发布词汇表更新的机制,这应该是很少见的。

如果发现一个问题,生成了无法恢复到原始形式的数据,修复将包含在次要版本和版本中,这些版本可以生成无效数据将被撤回。

开源许可证

本项目,如同Khonsu Labs的所有项目,都是开源的。此存储库可在MIT许可证Apache许可证2.0下使用。

了解更多关于贡献的信息,请参阅CONTRIBUTING.md

依赖项

~290–770KB
~17K SLoC