1#![doc = include_str!("../README.md")]
2
3#[doc(hidden)]
4pub mod __private {
5 pub use fake;
6 pub use kubetsu;
7}
8
9#[macro_export]
34macro_rules! impl_fake {
35 ($name:ident($inner:ty)) => {
37 const _: () = {
38 fn _assert_kubetsu_id()
39 where
40 $name: $crate::__private::kubetsu::KubetsuId<Inner = $inner>,
41 {
42 }
43 };
44
45 impl $crate::__private::fake::Dummy<$crate::__private::fake::Faker> for $name {
46 fn dummy_with_rng<R: $crate::__private::fake::RngExt + ?Sized>(
47 config: &$crate::__private::fake::Faker,
48 rng: &mut R,
49 ) -> Self {
50 let inner = $crate::__private::fake::Fake::fake_with_rng::<$inner, R>(config, rng);
51 Self::new(inner)
52 }
53 }
54 };
55 ($name:ident<$phantom:ident, $inner:ident>) => {
57 const _: () = {
58 fn _assert_kubetsu_id<$phantom, $inner>()
59 where
60 $name<$phantom, $inner>: $crate::__private::kubetsu::KubetsuId<Inner = $inner>,
61 {
62 }
63 };
64
65 impl<$phantom, $inner> $crate::__private::fake::Dummy<$crate::__private::fake::Faker>
66 for $name<$phantom, $inner>
67 where
68 $inner: $crate::__private::fake::Dummy<$crate::__private::fake::Faker>,
69 {
70 fn dummy_with_rng<R: $crate::__private::fake::RngExt + ?Sized>(
71 config: &$crate::__private::fake::Faker,
72 rng: &mut R,
73 ) -> Self {
74 let inner = $crate::__private::fake::Fake::fake_with_rng::<$inner, R>(config, rng);
75 Self::new(inner)
76 }
77 }
78 };
79}
80
81#[cfg(test)]
82mod tests {
83 use fake::{Fake, Faker};
84
85 kubetsu::define_id!(
86 pub struct UserId(i64);
87 );
88 kubetsu::define_id!(
89 pub struct ItemId(String);
90 );
91 crate::impl_fake!(UserId(i64));
92 crate::impl_fake!(ItemId(String));
93
94 kubetsu::define_id!(
95 pub struct MyId<T, U>;
96 );
97 crate::impl_fake!(MyId<T, U>);
98
99 struct User;
100 type MyUserId = MyId<User, i64>;
101
102 #[test]
103 fn test_fake_concrete() {
104 let _id: UserId = Faker.fake();
105 }
106
107 #[test]
108 fn test_fake_string() {
109 let _id: ItemId = Faker.fake();
110 }
111
112 #[test]
113 fn test_fake_generic() {
114 let _id: MyUserId = Faker.fake();
115 }
116}