Skip to main content

zoi_cli/
lib.rs

1//! Zoi CLI library.
2//!
3//! This crate provides the command-line interface logic for Zoi, including
4//! command parsing, execution, and utility functions for interacting with Zoi.
5
6/// Command-line argument parsing and definitions.
7pub mod cli;
8/// Implementation of CLI commands.
9pub mod cmd;
10/// Package-related CLI logic.
11pub mod pkg;
12/// Project management.
13pub use zoi_project as project;
14/// CLI-specific utility functions.
15pub mod utils;
16
17use anyhow::Result;
18pub use pkg::{local, mini_resolve};
19pub use zoi_common::SourceInstallOptions;
20pub use zoi_core::types::{self, Scope};
21pub use zoi_core::{
22    cache, config, hash, lock, offline, pgp, pin, pkgdir, recorder, sysroot,
23    upgrade
24};
25pub use zoi_hooks as hooks;
26pub use zoi_lua as lua;
27pub use zoi_purl as purl;
28pub use zoi_resolver as resolve;
29#[cfg(target_os = "linux")]
30pub use zoi_sandbox as sandbox;
31pub use zoi_telemetry as telemetry;
32
33/// Converts a core `Scope` to a CLI `InstallScope`.
34fn to_install_scope(scope: Scope) -> cli::InstallScope {
35    match scope {
36        Scope::User => cli::InstallScope::User,
37        Scope::System => cli::InstallScope::System,
38        Scope::Project => cli::InstallScope::Project
39    }
40}
41
42/// Installs one or more packages from source strings (PURLs or names).
43///
44/// # Errors
45///
46/// Returns an error if:
47/// - The plugin manager fails to initialize.
48/// - The installation process fails.
49pub fn install_sources(
50    sources: &[String],
51    options: &SourceInstallOptions
52) -> Result<()> {
53    let plugin_manager = if crate::pkg::utils::is_mini_mode() {
54        None
55    } else {
56        let pm = pkg::plugin::PluginManager::new()?;
57        let _ = pm.load_all(options.yes);
58        Some(pm)
59    };
60
61    let pm_ptr = plugin_manager.as_ref();
62
63    cmd::install::run(
64        sources,
65        options.repo.clone(),
66        options.force,
67        options.all_optional,
68        options.yes,
69        options.scope_override.map(to_install_scope),
70        false,
71        false,
72        options.save,
73        options.build_type.as_deref(),
74        options.dry_run,
75        pm_ptr,
76        options.build,
77        options.frozen,
78        false,
79        false,
80        3,
81        false,
82        false,
83        None
84    )
85}
86
87/// Uninstalls a package by name.
88///
89/// # Errors
90///
91/// Returns an error if the uninstallation process fails.
92pub fn uninstall_package(
93    package_name: &str,
94    scope_override: Option<Scope>
95) -> Result<()> {
96    zoi_uninstall::run(package_name, scope_override, false, false, false)
97        .map(|_| ())
98}