Identifier

Generate 128 bits id structs easily

Simple Example

```rust use identifier::{FromStr, Identifier};

mod generator { pub fn generate() -> u128 { 0x1234567890abcdef1234567890_abcdef }

pub fn validate(_: u128) -> bool {
    true
}

}

[derive(Identifier, Eq, PartialEq, FromStr, Debug)]

[identifier(with = "generator")]

pub struct UserId(u128);

fn main() { let id = UserId::generate(); let expectedid: UserId = "1234567890-abcdef-1234567890-abcdef".parse().unwrap(); asserteq!(id, expected_id); } ```

Example with a generate function requiring params

```rust use identifier::{FromStr, Identifier};

mod generator { pub fn generate(kind: u32, seed: u16) -> u128 { let randomnumber = 0x12340000 + (seed as u128); ((kind as u128) << 96) + random_number }

pub fn validate(value: u128, kind: u32, _: u16) -> bool {
    (value >> 96) as u32 == kind
}

}

const KINDUSER: u32 = 0x1111ffff;

[derive(Identifier, Eq, PartialEq, FromStr, Debug)]

[identifier(with = "generator", params = "KIND_USER, 0xabcd")]

pub struct UserId(u128);

fn main() { let id = UserId::generate(); let expectedid: UserId = "1111ffff-00000000-00000000-1234abcd".parse().unwrap(); asserteq!(id, expected_id);

let parse_error = "0000ffff-00000000-00000000-1234abcd".parse::<UserId>();
assert!(if let Err(identifier::ParseError::Invalid) = parse_error { true } else { false });

} ```