winget_types/installer/dependencies/
mod.rs

1use alloc::{collections::BTreeSet, string::String};
2
3pub use package::PackageDependencies;
4
5mod package;
6
7#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, Ord, PartialOrd)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9#[cfg_attr(feature = "serde", serde(rename_all = "PascalCase"))]
10pub struct Dependencies {
11    /// List of Windows feature dependencies
12    #[cfg_attr(
13        feature = "serde",
14        serde(skip_serializing_if = "BTreeSet::is_empty", default)
15    )]
16    pub windows_features: BTreeSet<String>,
17
18    /// List of Windows library dependencies
19    #[cfg_attr(
20        feature = "serde",
21        serde(skip_serializing_if = "BTreeSet::is_empty", default)
22    )]
23    pub windows_libraries: BTreeSet<String>,
24
25    /// List of package dependencies from current source
26    #[cfg_attr(
27        feature = "serde",
28        serde(
29            rename = "PackageDependencies",
30            skip_serializing_if = "BTreeSet::is_empty",
31            default
32        )
33    )]
34    pub package: BTreeSet<PackageDependencies>,
35
36    /// List of external package dependencies
37    #[cfg_attr(
38        feature = "serde",
39        serde(
40            rename = "ExternalDependencies",
41            skip_serializing_if = "BTreeSet::is_empty",
42            default
43        )
44    )]
45    pub external: BTreeSet<String>,
46}
47
48impl Dependencies {
49    /// Returns `true` if all the dependency fields are empty.
50    ///
51    /// # Examples
52    /// ```
53    /// # use std::collections::BTreeSet;
54    /// # use winget_types::installer::{Dependencies, PackageDependencies};
55    /// # use winget_types::{PackageIdentifier, PackageIdentifierError};
56    ///
57    /// # fn main() -> Result<(), PackageIdentifierError> {
58    /// let mut dependencies = Dependencies {
59    ///     windows_features: BTreeSet::new(),
60    ///     windows_libraries: BTreeSet::new(),
61    ///     package: BTreeSet::new(),
62    ///     external: BTreeSet::new(),
63    /// };
64    ///
65    /// assert!(dependencies.is_empty());
66    ///
67    /// dependencies.package.insert(PackageDependencies::new(PackageIdentifier::new("Git.Git")?));
68    ///
69    /// assert!(!dependencies.is_empty());
70    /// # Ok(())
71    /// # }
72    /// ```
73    #[must_use]
74    pub fn is_empty(&self) -> bool {
75        self.windows_features.is_empty()
76            && self.windows_libraries.is_empty()
77            && self.package.is_empty()
78            && self.external.is_empty()
79    }
80}