unique_type_id_workspace

Crates.iounique_type_id_workspace
lib.rsunique_type_id_workspace
version1.1.0
sourcesrc
created_at2020-02-23 13:14:01.330972
updated_at2023-03-24 11:06:11.121404
descriptionA workspace for the unique type id crate.
homepage
repositoryhttps://github.com/vityafx/unique-type-id
max_upload_size
id211734
size17,141
Shockingly Good (iddm)

documentation

README

unique-type-id

A rust procedural macro crate for generating unique id for the rust types.

MIT licensed

What does it do?

It simply implements a trait for the type where is only one method - id() -> TypeId which returns a unique positive number. For id generation, the procedural macro reads the file called "types.toml" and searches for the type name there. You may also specify another file name if you want by using UniqueTypeIdFile attribute. Speaking more detailed:

  1. The procedural macro reads the attributes on a type.

  2. If there are no attributes, it uses types.toml file name as types file name, otherwise uses specified one.

  3. For each type the macro is used it tries to find the type name in the types file. If it can find it, it returns it's id, otherwise it returns the available id. Reading tests helps in understanding this.

Usage

  1. Add unique-type-id as dependency in your Cargo.toml:
[dependencies]
unique-type-id-derive = "0.2"
unique-type-id = "0.2"
  1. Create a struct or enum and use the trait:
#[macro_use]
extern crate unique_type_id_derive;
extern crate unique_type_id;

#[test]
fn Unique_simple() {
    use unique_type_id::UniqueTypeId;
    #[derive(UniqueTypeId)]
    struct Test1;
    #[derive(UniqueTypeId)]
    struct Test2;
    
    assert_eq!(Test1::id().0, 1u64);
    assert_eq!(Test2::id().0, 2u64);
}

This will generate a types file if it has not been created yet and put there ids, starting with 0, for each type which was not found there. This is how it looks when you have predefined set of ids for your types:

#[test]
fn Unique_different_file() {
    use unique_type_id::UniqueTypeId;
    #[derive(UniqueTypeId)]
    #[UniqueTypeIdFile = "types2.toml"]
    struct Test1;
    #[derive(UniqueTypeId)]
    #[UniqueTypeIdFile = "types2.toml"]
    struct Test2;

    assert_eq!(Test1::id().0, 115u64);
    assert_eq!(Test2::id().0, 232u64);
}

Here we set up ids for our types manually by creating the types2.toml file.

Note

Default and custom type files are searched relatively to a directory where cargo build is called.

License

This project is licensed under the MIT license.

Commit count: 50

cargo fmt