aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-06-01 12:55:23 +0800
committer魏曹先生 <1992414357@qq.com>2026-06-01 12:55:23 +0800
commit1ab19e8765ea2ed62c8a41113d84867facaabf08 (patch)
tree1c81d759d195daf0275b031929292573f2b483fd
parent94baeaca074dd8b12d16180119cac09f453c5e85 (diff)
Change `ProgramSetup::setup` to consume `self` instead of borrow
-rw-r--r--CHANGELOG.md2
-rw-r--r--mingling/src/setups/basic.rs2
-rw-r--r--mingling/src/setups/exit_code.rs2
-rw-r--r--mingling/src/setups/general_renderer.rs4
-rw-r--r--mingling/src/setups/repl_basic.rs8
-rw-r--r--mingling_core/src/program/setup.rs7
-rw-r--r--mingling_macros/src/program_setup.rs2
7 files changed, 13 insertions, 14 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index cbfdbb0..61805aa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -25,7 +25,7 @@ let value: MyType = unpack_chain_process!(result, MyType);
#### **BREAKING CHANGES** (API CHANGES):
-None
+1. **\[core\]** Changed the signature of `ProgramSetup::setup` from `fn setup(&mut self, program: &mut Program<C>) -> S` to `fn setup(self, program: &mut Program<C>)`, consuming `self` instead of taking a mutable reference. Correspondingly, `Program::with_setup` now accepts `S` by value (`&mut self, setup: S`) instead of by mutable reference (`&mut self, setup: &mut S`).
### Release 0.1.9 (2026-05-29)
diff --git a/mingling/src/setups/basic.rs b/mingling/src/setups/basic.rs
index 6164c64..3783df0 100644
--- a/mingling/src/setups/basic.rs
+++ b/mingling/src/setups/basic.rs
@@ -11,7 +11,7 @@ impl<C> ProgramSetup<C> for BasicProgramSetup
where
C: ProgramCollect<Enum = C>,
{
- fn setup(&mut self, program: &mut Program<C>) {
+ fn setup(self, program: &mut Program<C>) {
program.global_flag(["--quiet", "-q"], |p| {
p.stdout_setting.render_output = false;
p.stdout_setting.error_output = false;
diff --git a/mingling/src/setups/exit_code.rs b/mingling/src/setups/exit_code.rs
index 9513363..88742d5 100644
--- a/mingling/src/setups/exit_code.rs
+++ b/mingling/src/setups/exit_code.rs
@@ -27,7 +27,7 @@ impl<C> ProgramSetup<C> for ExitCodeSetup<C>
where
C: ProgramCollect<Enum = C> + 'static,
{
- fn setup(&mut self, program: &mut crate::Program<C>) {
+ fn setup(self, program: &mut crate::Program<C>) {
// Insert resource
program.with_resource(ExitCode { exit_code: 0 });
diff --git a/mingling/src/setups/general_renderer.rs b/mingling/src/setups/general_renderer.rs
index e0a0d61..88f5bfa 100644
--- a/mingling/src/setups/general_renderer.rs
+++ b/mingling/src/setups/general_renderer.rs
@@ -9,7 +9,7 @@ impl<C> ProgramSetup<C> for GeneralRendererSimpleSetup
where
C: ProgramCollect<Enum = C>,
{
- fn setup(&mut self, program: &mut Program<C>) {
+ fn setup(self, program: &mut Program<C>) {
program.global_argument("--renderer", |p, renderer| {
p.general_renderer_name = renderer.into();
});
@@ -32,7 +32,7 @@ where
C: ProgramCollect<Enum = C>,
{
#[allow(unused_variables)]
- fn setup(&mut self, program: &mut Program<C>) {
+ fn setup(self, program: &mut Program<C>) {
#[cfg(feature = "json_serde_fmt")]
program.global_flag("--json", |p| {
p.general_renderer_name = crate::GeneralRendererSetting::Json;
diff --git a/mingling/src/setups/repl_basic.rs b/mingling/src/setups/repl_basic.rs
index fbb806e..8b9b83f 100644
--- a/mingling/src/setups/repl_basic.rs
+++ b/mingling/src/setups/repl_basic.rs
@@ -8,7 +8,7 @@ impl<C> ProgramSetup<C> for BasicREPLReadlineSetup
where
C: ProgramCollect<Enum = C>,
{
- fn setup(&mut self, program: &mut Program<C>) {
+ fn setup(self, program: &mut Program<C>) {
program.with_hook(ProgramHook::empty().on_repl_readline(|| readline().ok()));
}
}
@@ -39,7 +39,7 @@ impl<C> ProgramSetup<C> for BasicREPLPromptSetup
where
C: ProgramCollect<Enum = C>,
{
- fn setup(&mut self, program: &mut Program<C>) {
+ fn setup(self, program: &mut Program<C>) {
match self {
BasicREPLPromptSetup::Prompt(prompt) => {
static PROMPT: std::sync::OnceLock<String> = std::sync::OnceLock::new();
@@ -52,7 +52,7 @@ where
}
BasicREPLPromptSetup::Func(f) => {
static FUNC: std::sync::OnceLock<fn() -> String> = std::sync::OnceLock::new();
- let _ = FUNC.set(*f);
+ let _ = FUNC.set(f);
fn print_func_prompt() {
print!("{}", FUNC.get().unwrap()());
let _ = std::io::stdout().flush();
@@ -69,7 +69,7 @@ impl<C> ProgramSetup<C> for BasicREPLOutputSetup
where
C: ProgramCollect<Enum = C>,
{
- fn setup(&mut self, program: &mut Program<C>) {
+ fn setup(self, program: &mut Program<C>) {
program.with_hook(ProgramHook::empty().on_repl_receive_result(|r| {
if !r.is_empty() {
println!("{}", r.trim())
diff --git a/mingling_core/src/program/setup.rs b/mingling_core/src/program/setup.rs
index 0fe8070..fa9d0eb 100644
--- a/mingling_core/src/program/setup.rs
+++ b/mingling_core/src/program/setup.rs
@@ -4,7 +4,7 @@ pub trait ProgramSetup<C>
where
C: ProgramCollect<Enum = C>,
{
- fn setup(&mut self, program: &mut Program<C>);
+ fn setup(self, program: &mut Program<C>);
}
impl<C> Program<C>
@@ -12,8 +12,7 @@ where
C: ProgramCollect<Enum = C>,
{
/// Load and execute init logic
- pub fn with_setup<S: ProgramSetup<C> + 'static>(&mut self, mut setup: S) -> S {
- S::setup(&mut setup, self);
- setup
+ pub fn with_setup<S: ProgramSetup<C> + 'static>(&mut self, setup: S) {
+ S::setup(setup, self);
}
}
diff --git a/mingling_macros/src/program_setup.rs b/mingling_macros/src/program_setup.rs
index 383d632..d8f9507 100644
--- a/mingling_macros/src/program_setup.rs
+++ b/mingling_macros/src/program_setup.rs
@@ -105,7 +105,7 @@ pub fn setup_attr(attr: TokenStream, item: TokenStream) -> TokenStream {
#vis struct #struct_name;
impl ::mingling::setup::ProgramSetup<#program_name> for #struct_name {
- fn setup(&mut self, program: &mut ::mingling::Program<#program_name>) {
+ fn setup(self, program: &mut ::mingling::Program<#program_name>) {
// Call the original function with the actual Program type
#fn_name(program);
}