aboutsummaryrefslogtreecommitdiff
path: root/mingling_cli/src/pkg_mgr/cmd_pkg_enable.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-08-17 05:49:19 +0800
committer魏曹先生 <1992414357@qq.com>2026-08-17 05:49:19 +0800
commit57c53affe3542cb6bd4e79ee4c18f20a1bd76b2d (patch)
tree1cd4aef44cb7a45a8cd9d520b598f5f181e24c76 /mingling_cli/src/pkg_mgr/cmd_pkg_enable.rs
parentef23cd944402939605c78a4a853ef6e33af02c21 (diff)
refactor!: replace pack! macros with derive-based pipeline types
Remove the `pack!`, `pack_err!`, `pack_structural!`, and `pack_err_structural!` macros, replacing all pipeline type definitions with `#[derive(Grouped)]` and `#[derive(Grouped, Wrap)]` attributes. This changes the generated struct shape from named-field structs with an `inner` field to tuple structs accessed via `.0`, and removes the auto-generated `name` and `info` fields from error types.
Diffstat (limited to 'mingling_cli/src/pkg_mgr/cmd_pkg_enable.rs')
-rw-r--r--mingling_cli/src/pkg_mgr/cmd_pkg_enable.rs27
1 files changed, 15 insertions, 12 deletions
diff --git a/mingling_cli/src/pkg_mgr/cmd_pkg_enable.rs b/mingling_cli/src/pkg_mgr/cmd_pkg_enable.rs
index 8f6a234..1235cd3 100644
--- a/mingling_cli/src/pkg_mgr/cmd_pkg_enable.rs
+++ b/mingling_cli/src/pkg_mgr/cmd_pkg_enable.rs
@@ -1,8 +1,8 @@
use std::{fs, io};
use mingling::{
- Grouped, RenderResult, Routable, ShellContext, Suggest, SuggestItem,
- macros::{arg, chain, command, completion, metadata, pack, pack_err, renderer, routeify},
+ Grouped, RenderResult, Routable, ShellContext, Suggest, SuggestItem, Wrap,
+ macros::{arg, chain, command, completion, metadata, renderer, routeify},
metadata::Description,
picker::{EntryPicker, PickerArg},
};
@@ -18,8 +18,11 @@ use crate::{
/// Positional argument: package spec (`foo`, `foo@0`, `foo@0.1`, `foo@0.1.2`)
pub static ARG_SPEC: PickerArg<String> = arg![String];
-pack_err!(ErrorNoMatchingVersion = String);
-pack!(StatePkgEnable = (String, String));
+#[derive(Grouped, Wrap)]
+pub struct ErrorNoMatchingVersion(String);
+
+#[derive(Grouped, Wrap)]
+pub struct StatePkgEnable((String, String));
#[derive(Debug, Default, Grouped)]
pub struct ResultPkgEnable {
@@ -35,14 +38,14 @@ pub fn desc_pkg_enable() -> Description {
#[command(node = "pkg-enable", routeify)]
pub fn package_enable(args: EntryPkgEnable, packages_dir: &ResPackagesDir) -> Next {
let spec = args
- .pick_or_route(&ARG_SPEC, || ErrorPackageNameRequired::default().to_chain())
+ .pick_or_route(&ARG_SPEC, || ErrorPackageNameRequired.to_chain())
.to_result()?;
let packages_dir = &packages_dir.path;
if packages_dir.as_os_str().is_empty() {
- return ErrorNoDataDirectory::default().to_chain();
+ return ErrorNoDataDirectory.to_chain();
}
if spec.contains('/') || spec.contains('\\') || spec.contains("..") {
- return ErrorPackageSpecInvalid::new(spec).to_chain();
+ return ErrorPackageSpecInvalid(spec).to_chain();
}
let (name, version_part) = match spec.split_once('@') {
@@ -78,18 +81,18 @@ pub fn package_enable(args: EntryPkgEnable, packages_dir: &ResPackagesDir) -> Ne
}
let Some((_, version)) = candidates.into_iter().max_by(|a, b| a.1.cmp(&b.1)) else {
- return ErrorNoMatchingVersion::new(spec).to_chain();
+ return ErrorNoMatchingVersion(spec).to_chain();
};
- StatePkgEnable::new((name, version.to_string())).to_chain()
+ StatePkgEnable((name, version.to_string())).to_chain()
}
#[chain(routeify)]
pub fn handle_state_pkg_enable(p: StatePkgEnable, packages_dir: &ResPackagesDir) -> Next {
- let (name, version) = p.inner;
+ let (name, version) = p.0;
let packages_dir = &packages_dir.path;
if packages_dir.as_os_str().is_empty() {
- return ErrorNoDataDirectory::default().to_chain();
+ return ErrorNoDataDirectory.to_chain();
}
let file = packages_dir.join(&name);
@@ -110,7 +113,7 @@ pub fn render_result_pkg_enable(result: ResultPkgEnable) -> RenderResult {
#[renderer]
pub fn render_error_no_matching_version(err: ErrorNoMatchingVersion) -> RenderResult {
let mut r = RenderResult::new();
- eprintln_cargo!(r, "no matching version for: {}", err.info);
+ eprintln_cargo!(r, "no matching version for: {}", err.0);
r
}