arch_pkg_text/desc/
query.rs1use crate::{
2 desc::field::{FieldName, ParsedField},
3 value,
4};
5
6macro_rules! def_traits {
7 ($(
8 $(#[$attrs:meta])*
9 $name:ident, $name_mut:ident = $field_name:ident -> $value_type:ident;
10 )*) => {
11 pub trait Query<'a> {
13 fn query_raw_text(&self, field: ParsedField) -> Option<&'a str>;
14 $(
15 $(#[$attrs])*
16 fn $name(&self) -> Option<value::$value_type<'a>> {
17 self.query_raw_text(ParsedField::new(FieldName::$field_name))
18 .map(value::$value_type::new)
19 }
20 )*
21 }
22
23 pub trait QueryMut<'a> {
25 fn query_raw_text_mut(&mut self, field: ParsedField) -> Option<&'a str>;
26 $(
27 $(#[$attrs])*
28 fn $name_mut(&mut self) -> Option<value::$value_type<'a>> {
29 self.query_raw_text_mut(ParsedField::new(FieldName::$field_name))
30 .map(value::$value_type::new)
31 }
32 )*
33 }
34 };
35}
36
37def_traits! {
38 file_name, file_name_mut = FileName -> FileName;
39 name, name_mut = Name -> Name;
40 base, base_mut = Base -> Base;
41 version, version_mut = Version -> Version;
42 description, description_mut = Description -> Description;
43 groups, groups_mut = Groups -> GroupList;
44 compressed_size, compressed_size_mut = CompressedSize -> Size;
45 installed_size, installed_size_mut = InstalledSize -> Size;
46 md5_checksum, md5_checksum_mut = Md5Checksum -> Hex128;
47 sha256_checksum, sha256_checksum_mut = Sha256Checksum -> Hex256;
48 pgp_signature, pgp_signature_mut = PgpSignature -> PgpSignature;
49 url, url_mut = Url -> Url;
50 license, license_mut = License -> LicenseList;
51 architecture, architecture_mut = Architecture -> ArchitectureList;
52 build_date, build_date_mut = BuildDate -> Timestamp;
53 packager, packager_mut = Packager -> Packager;
54 dependencies, dependencies_mut = Dependencies -> DependencyList;
55 make_dependencies, make_dependencies_mut = MakeDependencies -> DependencyList;
56 check_dependencies, check_dependencies_mut = CheckDependencies -> DependencyList;
57 opt_dependencies, opt_dependencies_mut = OptionalDependencies -> DependencyAndReasonList;
58 provides, provides_mut = Provides -> DependencyList;
59 conflicts, conflicts_mut = Conflicts -> DependencyList;
60 replaces, replaces_mut = Replaces -> DependencyList;
61}
62
63mod forgetful;
64mod generic;
65mod memo;
66
67pub use crate::parse::ParsedDesc as EagerQuerier;
68pub use forgetful::ForgetfulQuerier;
69pub use memo::MemoQuerier;