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