alpm_lint/lint_rules/source_info/
mod.rs

1//! All lints for [SRCINFO] files and data.
2//!
3//! [SRCINFO]: https://alpm.archlinux.page/specifications/SRCINFO.5.html
4
5use alpm_srcinfo::{SourceInfo, SourceInfoV1};
6
7use crate::{Error, LintScope, Resources};
8
9pub mod duplicate_architecture;
10pub mod invalid_spdx_license;
11pub mod no_architecture;
12pub mod openpgp_key_id;
13pub mod undefined_architecture;
14pub mod unknown_architecture;
15pub mod unsafe_checksum;
16
17/// Extracts a [`SourceInfoV1`] from a [`Resources`].
18///
19/// # Note
20///
21/// The `lint_rule` needs to be provided to provide a meaningful message in case of an error.
22///
23/// # Errors
24///
25/// Returns an error if `resources` does not contain [`SourceInfo`] data.
26fn source_info_from_resource(
27    resources: &Resources,
28    lint_rule: String,
29) -> Result<&SourceInfoV1, Error> {
30    match resources {
31        Resources::SourceRepository {
32            source_info: SourceInfo::V1(source_info),
33            ..
34        }
35        | Resources::SourceInfo(SourceInfo::V1(source_info)) => Ok(source_info),
36        _ => Err(Error::InvalidResources {
37            scope: resources.scope(),
38            lint_rule,
39            expected: LintScope::SourceInfo,
40        }),
41    }
42}