bump_scope/
traits.rs

1mod bump_allocator;
2pub(crate) mod bump_allocator_ext;
3mod bump_allocator_scope;
4pub(crate) mod bump_allocator_scope_ext;
5mod mut_bump_allocator;
6pub(crate) mod mut_bump_allocator_ext;
7mod mut_bump_allocator_scope;
8pub(crate) mod mut_bump_allocator_scope_ext;
9
10pub use bump_allocator::BumpAllocator;
11pub use bump_allocator_ext::BumpAllocatorExt;
12pub use bump_allocator_scope::BumpAllocatorScope;
13pub use bump_allocator_scope_ext::BumpAllocatorScopeExt;
14pub use mut_bump_allocator::MutBumpAllocator;
15pub use mut_bump_allocator_ext::MutBumpAllocatorExt;
16pub use mut_bump_allocator_scope::MutBumpAllocatorScope;
17pub use mut_bump_allocator_scope_ext::MutBumpAllocatorScopeExt;
18
19macro_rules! assert_dyn_compatible {
20    ($($tt:tt)*) => {
21        const _: () = {
22            #[expect(dead_code)]
23            fn assert_dyn_compatible(_: &dyn $($tt)*) {}
24        };
25    };
26}
27
28pub(crate) use assert_dyn_compatible;
29
30macro_rules! assert_implements {
31    ([$($what:tt)*] $($ty:ty)*) => {
32        #[cfg(test)]
33        const _: () = {
34            #[expect(unused_imports)]
35            use crate::{
36                alloc::Allocator,
37                traits::{
38                    BumpAllocatorScope,
39                    MutBumpAllocator,
40                    MutBumpAllocatorScope,
41                }
42            };
43
44            #[allow(dead_code)]
45            type A = crate::alloc::NoopAllocator;
46            #[allow(dead_code)]
47            type Bump = crate::Bump<A, 1, true, true, true>;
48            #[allow(dead_code)]
49            type BumpScope<'a> = crate::BumpScope<'a, A, 1, true, true, true>;
50            #[allow(clippy::extra_unused_lifetimes)]
51            const fn implements<'a, What: $($what)*>() {}
52            $(
53                #[allow(clippy::mut_mut)]
54                implements::<$ty>();
55            )*
56        };
57    };
58}
59
60pub(crate) use assert_implements;
61
62assert_implements! {
63    [Allocator + ?Sized]
64
65    Bump
66    &Bump
67    &&Bump
68    &mut Bump
69    &mut &mut Bump
70
71    BumpScope
72    &BumpScope
73    &&BumpScope
74    &mut BumpScope
75    &mut &mut BumpScope
76}