aboutsummaryrefslogtreecommitdiff
path: root/mingling_cli/src/pkg_mgr.rs
diff options
context:
space:
mode:
Diffstat (limited to 'mingling_cli/src/pkg_mgr.rs')
-rw-r--r--mingling_cli/src/pkg_mgr.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/mingling_cli/src/pkg_mgr.rs b/mingling_cli/src/pkg_mgr.rs
index b77c3b3..7aea59d 100644
--- a/mingling_cli/src/pkg_mgr.rs
+++ b/mingling_cli/src/pkg_mgr.rs
@@ -1,2 +1,40 @@
pub mod cmd_install;
+pub mod cmd_uninstall;
+use std::path::PathBuf;
+
+use mingling::{
+ Program,
+ macros::{buffer, pack_err, program_setup, r_println, renderer},
+};
+
+use crate::ThisProgram;
+
+pack_err!(ErrorRootPackageNotFound);
+pack_err!(ErrorNoDataDirectory);
+
+/// The `.mingling` packages directory under the user's data directory.
+#[derive(Debug, Default, Clone)]
+pub struct ResPackagesDir {
+ pub path: PathBuf,
+}
+
+#[program_setup]
+pub fn package_manager_setup(program: &mut Program<ThisProgram>) {
+ let path = dirs::data_dir()
+ .map(|data_dir| data_dir.join(".mingling"))
+ .unwrap_or_default();
+ program.with_resource(ResPackagesDir { path });
+}
+
+#[renderer(buffer)]
+pub fn render_error_root_package_not_found(_: ErrorRootPackageNotFound) {
+ r_println!("error: failed to determine the root package");
+ r_println!("");
+ r_println!("Run `mling install` / `mling uninstall` inside a Cargo workspace");
+}
+
+#[renderer(buffer)]
+pub fn render_error_no_data_directory(_: ErrorNoDataDirectory) {
+ r_println!("error: failed to determine the data directory");
+}