firebase_rs_sdk/util/
compat.rs

1pub trait Compat<T> {
2    fn delegate(&self) -> &T;
3}
4
5pub fn get_modular_instance<T>(service: &T) -> &T {
6    service
7}
8
9pub fn get_compat_delegate<T, C>(service: &C) -> &T
10where
11    C: Compat<T>,
12{
13    service.delegate()
14}
15
16#[cfg(test)]
17mod tests {
18    use super::*;
19
20    struct Wrapper<T> {
21        inner: T,
22    }
23
24    impl<T> Compat<T> for Wrapper<T> {
25        fn delegate(&self) -> &T {
26            &self.inner
27        }
28    }
29
30    #[test]
31    fn returns_plain_instance() {
32        let value = 10;
33        assert_eq!(*get_modular_instance(&value), 10);
34    }
35
36    #[test]
37    fn returns_delegate_for_wrapper() {
38        let wrapped = Wrapper { inner: 42 };
39        assert_eq!(*get_compat_delegate(&wrapped), 42);
40    }
41}