winbrew_engines\windows\msix/remove.rs
1//! MSIX removal implementation.
2//!
3//! This adapter expects the installed package receipt to contain
4//! `EngineMetadata::Msix`. It extracts the stored package full name and passes
5//! it to `crate::windows_dep::packages::msix_remove`.
6//!
7//! The module does not query the registry or derive package identity on its
8//! own. That information must already be present in the receipt.
9
10use anyhow::{Context, Result, bail};
11
12use crate::models::install::engine::EngineMetadata;
13use crate::models::install::installed::InstalledPackage as WinbrewPackage;
14
15use crate::windows_dep::packages::msix_remove;
16
17/// Remove an MSIX package using the package full name stored in the receipt.
18///
19/// Returns an error when the installed package does not carry MSIX metadata or
20/// when Windows rejects the uninstall call.
21pub(crate) fn remove(package: &WinbrewPackage) -> Result<()> {
22 let package_full_name = match package.engine_metadata.as_ref() {
23 Some(EngineMetadata::Msix {
24 package_full_name, ..
25 }) => package_full_name,
26 _ => bail!("missing msix receipt metadata for '{}'", package.name),
27 };
28
29 msix_remove(package_full_name)
30 .with_context(|| format!("msix uninstall failed for {package_full_name}"))?;
31
32 Ok(())
33}