arch_pkg_text/desc/
query.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
use crate::{
    desc::field::{FieldName, ParsedField},
    value,
};

macro_rules! def_traits {
    ($(
        $(#[$attrs:meta])*
        $name:ident, $name_mut:ident = $field_name:ident -> $value_type:ident;
    )*) => {
        /// Get information from a `desc` file.
        pub trait Query<'a>: QueryMut<'a> {
            fn query_raw_text(&self, field: ParsedField) -> Option<&'a str>;
            $(
                $(#[$attrs])*
                fn $name(&self) -> Option<value::$value_type<'a>> {
                    self.query_raw_text(ParsedField::new(FieldName::$field_name))
                        .map(value::$value_type::new)
                }
            )*
        }

        /// Get information from a `desc` file, mutability required.
        pub trait QueryMut<'a> {
            fn query_raw_text_mut(&mut self, field: ParsedField) -> Option<&'a str>;
            $(
                $(#[$attrs])*
                fn $name_mut(&mut self) -> Option<value::$value_type<'a>> {
                    self.query_raw_text_mut(ParsedField::new(FieldName::$field_name))
                        .map(value::$value_type::new)
                }
            )*
        }
    };
}

def_traits! {
    file_name, file_name_mut = FileName -> FileName;
    name, name_mut = Name -> Name;
    base, base_mut = Base -> Base;
    version, version_mut = Version -> Version;
    description, description_mut = Description -> Description;
    groups, groups_mut = Groups -> GroupList;
    compressed_size, compressed_size_mut = CompressedSize -> Size;
    installed_size, installed_size_mut = InstalledSize -> Size;
    md5_checksum, md5_checksum_mut = Md5Checksum -> Hex128;
    sha256_checksum, sha256_checksum_mut = Sha256Checksum -> Hex256;
    pgp_signature, pgp_signature_mut = PgpSignature -> PgpSignature;
    url, url_mut = Url -> Url;
    license, license_mut = License -> LicenseList;
    architecture, architecture_mut = Architecture -> ArchitectureList;
    build_date, build_date_mut = BuildDate -> Timestamp;
    packager, packager_mut = Packager -> Packager;
    dependencies, dependencies_mut = Dependencies -> DependencyList;
    make_dependencies, make_dependencies_mut = MakeDependencies -> DependencyList;
    check_dependencies, check_dependencies_mut = CheckDependencies -> DependencyList;
    opt_dependencies, opt_dependencies_mut = OptionalDependencies -> DependencyAndReasonList;
    provides, provides_mut = Provides -> DependencyList;
    conflicts, conflicts_mut = Conflicts -> DependencyList;
    replaces, replaces_mut = Replaces -> DependencyList;
}

mod forgetful;
mod memo;

pub use crate::parse::ParsedDesc as EagerQuerier;
pub use forgetful::ForgetfulQuerier;
pub use memo::MemoQuerier;