1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
//! A unique id generator for rust types.
//!
//! The crate provides a trait and a procedural macro. By deriving one, you implement the
//! trait with `fn id() -> TypeId` static method. The type id is unique in the whole project.
//!
//! For examples, see the `tests` directory in the source tree.
//!
//! # Usage
//!
//! The example usage:
//!
//! ```rust
//!#[macro_use]
//!extern crate unique_type_id_derive;
//!extern crate unique_type_id;
//!
//!fn check_id() {
//! use unique_type_id::UniqueTypeId;
//!
//! // This code uses "types.toml" (the default) file for ids.
//! #[derive(UniqueTypeId)]
//! struct Test1;
//! #[derive(UniqueTypeId)]
//! struct Test2;
//!
//! assert_eq!(Test1::id().0, 1u64);
//! assert_eq!(Test2::id().0, 2u64);
//!}
//! ```
extern crate quote;
extern crate syn;
/// A strong type for type id.
pub struct TypeId<T>(pub T);
/// A trait for providing a type id number.
pub trait UniqueTypeId<T> {
const TYPE_ID: TypeId<T>;
/// Returns the type id number.
fn id() -> TypeId<T>;
}