arch_pkg_text/desc/query/
generic.rs

1use super::{Query, QueryMut};
2use crate::desc::{ParsedField, misc::ReuseAdvice};
3use core::{
4    ops::{Deref, DerefMut},
5    pin::Pin,
6};
7
8impl<'a, Querier: Query<'a> + ?Sized> Query<'a> for &Querier {
9    fn query_raw_text(&self, field: ParsedField) -> Option<&'a str> {
10        Querier::query_raw_text(*self, field)
11    }
12}
13
14impl<'a, Querier: Query<'a> + ?Sized> QueryMut<'a> for &Querier {
15    fn query_raw_text_mut(&mut self, field: ParsedField) -> Option<&'a str> {
16        self.query_raw_text(field)
17    }
18}
19
20impl<'a, Querier: QueryMut<'a> + ?Sized> QueryMut<'a> for &mut Querier {
21    fn query_raw_text_mut(&mut self, field: ParsedField) -> Option<&'a str> {
22        Querier::query_raw_text_mut(*self, field)
23    }
24}
25
26impl<'a, Ptr: Deref<Target: Query<'a>>> Query<'a> for Pin<Ptr> {
27    fn query_raw_text(&self, field: ParsedField) -> Option<&'a str> {
28        self.deref().query_raw_text(field)
29    }
30}
31
32impl<'a, Ptr: DerefMut<Target: QueryMut<'a> + Unpin>> QueryMut<'a> for Pin<Ptr> {
33    fn query_raw_text_mut(&mut self, field: ParsedField) -> Option<&'a str> {
34        self.deref_mut().query_raw_text_mut(field)
35    }
36}
37
38impl<Querier: ReuseAdvice + ?Sized> ReuseAdvice for &Querier {
39    type ShouldReuse = Querier::ShouldReuse;
40}
41
42impl<Querier: ReuseAdvice + ?Sized> ReuseAdvice for &mut Querier {
43    type ShouldReuse = Querier::ShouldReuse;
44}
45
46impl<Ptr: Deref<Target: ReuseAdvice>> ReuseAdvice for Pin<Ptr> {
47    type ShouldReuse = <Ptr::Target as ReuseAdvice>::ShouldReuse;
48}
49
50#[cfg(feature = "parking_lot")]
51mod parking_lot_ext;
52#[cfg(feature = "std")]
53mod std_ext;