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