arch_pkg_text/srcinfo/query/
generic.rs

1use super::{Query, QueryMut, QueryRawTextItem};
2use crate::srcinfo::{FieldName, 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_name: FieldName) -> impl Iterator<Item = QueryRawTextItem<'a>> {
10        Querier::query_raw_text(*self, field_name)
11    }
12}
13
14impl<'a, Querier: Query<'a> + ?Sized> QueryMut<'a> for &Querier {
15    fn query_raw_text_mut(
16        &mut self,
17        field_name: FieldName,
18    ) -> impl Iterator<Item = QueryRawTextItem<'a>> {
19        self.query_raw_text(field_name)
20    }
21}
22
23impl<'a, Querier: QueryMut<'a> + ?Sized> QueryMut<'a> for &mut Querier {
24    fn query_raw_text_mut(
25        &mut self,
26        field_name: FieldName,
27    ) -> impl Iterator<Item = QueryRawTextItem<'a>> {
28        Querier::query_raw_text_mut(*self, field_name)
29    }
30}
31
32impl<'a, Ptr: Deref<Target: Query<'a>>> Query<'a> for Pin<Ptr> {
33    fn query_raw_text(&self, field_name: FieldName) -> impl Iterator<Item = QueryRawTextItem<'a>> {
34        self.deref().query_raw_text(field_name)
35    }
36}
37
38impl<'a, Ptr: DerefMut<Target: QueryMut<'a> + Unpin>> QueryMut<'a> for Pin<Ptr> {
39    fn query_raw_text_mut(
40        &mut self,
41        field_name: FieldName,
42    ) -> impl Iterator<Item = QueryRawTextItem<'a>> {
43        self.deref_mut().query_raw_text_mut(field_name)
44    }
45}
46
47impl<Querier: ReuseAdvice + ?Sized> ReuseAdvice for &Querier {
48    type ShouldReuse = Querier::ShouldReuse;
49}
50
51impl<Querier: ReuseAdvice + ?Sized> ReuseAdvice for &mut Querier {
52    type ShouldReuse = Querier::ShouldReuse;
53}
54
55impl<Ptr: Deref<Target: ReuseAdvice>> ReuseAdvice for Pin<Ptr> {
56    type ShouldReuse = <Ptr::Target as ReuseAdvice>::ShouldReuse;
57}
58
59#[cfg(feature = "std")]
60mod std_ext;