maycoon_core/
reference.rs1use std::ops::Deref;
2use std::sync::RwLockReadGuard;
3
4pub enum Ref<'a, T> {
10 Owned(T),
12 Borrow(&'a T),
14 Ref(std::cell::Ref<'a, T>),
16 ReadGuard(RwLockReadGuard<'a, T>),
18}
19
20impl<'a, T> Deref for Ref<'a, T> {
21 type Target = T;
22
23 fn deref(&self) -> &Self::Target {
24 match self {
25 Ref::Owned(value) => value,
26 Ref::Borrow(value) => value,
27 Ref::Ref(value) => value,
28 Ref::ReadGuard(value) => value,
29 }
30 }
31}
32
33impl<'a, T> From<T> for Ref<'a, T> {
34 fn from(value: T) -> Self {
35 Ref::Owned(value)
36 }
37}
38
39impl<'a, T> From<&'a T> for Ref<'a, T> {
40 fn from(value: &'a T) -> Self {
41 Ref::Borrow(value)
42 }
43}
44
45impl<'a, T> From<std::cell::Ref<'a, T>> for Ref<'a, T> {
46 fn from(value: std::cell::Ref<'a, T>) -> Self {
47 Ref::Ref(value)
48 }
49}
50
51impl<'a, T> From<RwLockReadGuard<'a, T>> for Ref<'a, T> {
52 fn from(value: RwLockReadGuard<'a, T>) -> Self {
53 Ref::ReadGuard(value)
54 }
55}