arch_pkg_db/single/iter/
entry.rs1use arch_pkg_text::{
2 desc::{FieldName, ParsedField, Query, QueryMut},
3 value::Name,
4};
5use pipe_trait::Pipe;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq)]
12pub struct Entry<'a, Querier> {
13 name: Name<'a>,
14 querier: Querier,
15}
16
17impl<'a, Querier> Entry<'a, Querier> {
18 pub(super) fn new_unchecked(name: &'a str, querier: Querier) -> Self {
20 Entry {
21 name: Name(name),
22 querier,
23 }
24 }
25
26 pub fn into_tuple(self) -> (Name<'a>, Querier) {
28 let Entry { name, querier } = self;
29 (name, querier)
30 }
31
32 pub fn name(&self) -> Name<'a> {
34 self.name
35 }
36
37 pub fn querier(&self) -> &Querier {
39 &self.querier
40 }
41
42 pub fn querier_mut(&mut self) -> &mut Querier {
44 &mut self.querier
45 }
46
47 pub fn into_querier(self) -> Querier {
49 self.querier
50 }
51}
52
53impl<'a, Querier> Query<'a> for Entry<'a, Querier>
54where
55 Querier: Query<'a>,
56{
57 fn query_raw_text(&self, field: ParsedField) -> Option<&'a str> {
58 match field.name() {
59 FieldName::Name => self.name().as_str().pipe(Some),
60 _ => self.querier.query_raw_text(field),
61 }
62 }
63
64 fn name(&self) -> Option<Name<'a>> {
65 self.name().pipe(Some)
66 }
67}
68
69impl<'a, Querier> QueryMut<'a> for Entry<'a, Querier>
70where
71 Querier: QueryMut<'a>,
72{
73 fn query_raw_text_mut(&mut self, field: ParsedField) -> Option<&'a str> {
74 match field.name() {
75 FieldName::Name => self.name().as_str().pipe(Some),
76 _ => self.querier.query_raw_text_mut(field),
77 }
78 }
79
80 fn name_mut(&mut self) -> Option<Name<'a>> {
81 self.name().pipe(Some)
82 }
83}