2个版本
0.3.1 | 2022年9月7日 |
---|---|
0.3.0 | 2021年11月1日 |
0.2.0 |
|
0.1.0 |
|
#71 在 值格式化 中
每月27次下载
150KB
9K SLoC
englishid
无符号整数ID和任意数据的英文格式化。
无符号整数的英文格式化。适用于以人类可读和可识别的格式编码大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