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
/// Defines the data type associated with unique identifier data type
pub trait UniqueIdentifier: Send + Sync {
    type Data;
}

#[cfg(test)]
mod tests {
    use super::*;
    use uid_derive::UID;

    #[test]
    fn uid() {
        enum U {}
        impl UniqueIdentifier for U {
            type Data = f64;
        }
        let _: <U as UniqueIdentifier>::Data = 1f64;
    }

    #[test]
    fn derive() {
        #[derive(UID)]
        enum U {}
        let _: <U as UniqueIdentifier>::Data = vec![1f64];
    }

    #[test]
    fn derive_uid() {
        #[derive(UID)]
        #[uid(data = "Vec<f32>")]
        enum U {}
        let _: <U as UniqueIdentifier>::Data = vec![1f32];
    }

    #[test]
    fn derive_uid_err() {
        #[derive(UID)]
        #[uid(dat = "Vec<f32>")]
        enum U {}
        let _: <U as UniqueIdentifier>::Data = vec![1f32];
    }
}