firebase_rs_sdk/util/
compat.rs1pub 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}