1#![no_std]
2
3use core::ops::*;
7
8#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
10pub struct Const;
11
12#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
14pub struct Mut;
15
16pub trait Mutability: private::MutabilityInner {
18 type Ref<'a, T: 'a + ?Sized>: Deref<Target = T>;
20}
21
22impl Mutability for Const {
23 type Ref<'a, T: 'a + ?Sized> = &'a T;
24}
25
26impl Mutability for Mut {
27 type Ref<'a, T: 'a + ?Sized> = &'a mut T;
28}
29
30mod private {
32 use super::*;
33
34 pub trait MutabilityInner: 'static + Copy + Clone + Send + Sync + core::fmt::Debug + Default + PartialEq + Eq + PartialOrd + Ord + core::hash::Hash {}
36
37 impl MutabilityInner for Const {}
38 impl MutabilityInner for Mut {}
39}