4个版本

0.1.3 2020年11月21日
0.1.2 2020年11月21日
0.1.1 2020年11月20日
0.1.0 2020年11月20日

#1627数据结构

每月21次下载

MIT/Apache

14KB
68

Identifier

doc minimum rustc 1.31.0 version GitHub MathieuTricoire/identifier

轻松生成128位id结构体

安装

[dependencies]
identifier = "0.1"

版本要求:rustc 1.31+

简单示例

前往生成器部分了解如何创建

use generators::uuid;
use identifier::{Display, FromStr, Identifier};

#[derive(Identifier, Eq, PartialEq, Display, FromStr)]
#[identifier(with = "uuid")]
pub struct UserId(u128);

fn main() {
    let id = UserId::generate();
    println!("generated user id: {}", id);

    let parsed_id = "5ed9a942-223e-4639-a97c-6b6c41ac48d3".parse::<UserId>();
    assert!(parsed_id.is_ok());
}

需要参数的生成器示例

use generators::random_id;
use identifier::{Display, FromStr, Identifier};

const KIND: u32 = 0x1111_ffff;

#[derive(Identifier, Eq, PartialEq, FromStr, Display)]
#[identifier(with = "random_id", params = "KIND, 0xabcd")]
pub struct PostId(u128);

fn main() {
    let id = PostId::generate();
    println!("generated post id: {}", id);
}

生成器

无参数(使用uuid crate

mod uuid {
    use uuid::Uuid;

    pub fn generate() -> u128 {
        Uuid::new_v4().as_u128()
    }

    pub fn validate(value: u128) -> bool {
        if let Some(Version::Random) = Uuid::from_u128(value).get_version() {
            true
        } else {
            false
        }
    }
}

有参数

mod random_id {
    pub fn generate(kind: u32, seed: u16) -> u128 {
        /* generate a random id with the given params ... */
    }

    pub fn validate(value: u128, kind: u32, _: u16) -> bool {
        /* check it's a correct random id ... */
    }
}

许可证

根据您选择,许可协议为以下之一

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的任何旨在包含在作品中的贡献,均应如上双重许可,不附加任何额外条款或条件。

依赖项

~0.3–0.8MB
~19K SLoC