Skip to main content

prefixed_tsid/
resources.rs

1use std::hash::Hash;
2use std::fmt::Debug;
3
4pub trait TSIDResource: Eq + PartialEq + Clone + Copy + Hash + Send + Debug {
5    fn prefix() -> Option<String>;
6}
7
8#[macro_export]
9macro_rules! id_resource_type {
10    ($struct_name: ident, $prefix: literal) => {
11        #[derive(Eq, PartialEq, Clone, Copy, Debug, Hash)]
12        pub struct $struct_name;
13        impl TSIDResource for $struct_name {
14            fn prefix() -> Option<String> {
15                Some($prefix.to_owned())
16            }
17        }
18    };
19}
20
21#[derive(Eq, PartialEq, Clone, Copy, Debug, Hash)]
22pub struct IDUnknown;
23impl TSIDResource for IDUnknown {
24    fn prefix() -> Option<String> {
25        None
26    }
27}