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}