arch_pkg_text/desc/
query.rs

1use 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        /// Get information from a `desc` file.
12        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        /// Get information from a `desc` file, mutability required.
24        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;