1pub mod code_point;
2pub mod code_source;
3pub mod file_relative;
4pub mod structure;
5
6pub trait ConvertibleToRef<Output> {
7 fn try_as_ref(&self) -> Option<&Output>;
8}
9
10pub trait ConvertibleToMut<Output>: ConvertibleToRef<Output> {
11 fn try_as_mut(&mut self) -> Option<&mut Output>;
12}
13
14impl<T, U> ConvertibleToRef<U> for T
15where
16 for<'a> &'a U: TryFrom<&'a T>,
17{
18 fn try_as_ref(&self) -> Option<&U> {
19 self.try_into().ok()
20 }
21}
22
23impl<T, U> ConvertibleToMut<U> for T
24where
25 for<'a> &'a mut U: TryFrom<&'a mut T>,
26 T: ConvertibleToRef<U>,
27{
28 fn try_as_mut(&mut self) -> Option<&mut U> {
29 self.try_into().ok()
30 }
31}