kodept_core/
lib.rs

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}