aboutsummaryrefslogtreecommitdiff
path: root/CHANGELOG.md
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-07-18 00:57:02 +0800
committer魏曹先生 <1992414357@qq.com>2026-07-18 00:57:02 +0800
commit7c31ed32e9f5b9e61bae0f05a4728ca31e814b23 (patch)
tree3cacd6bd421eafbf625c6dee3cedca656bcf2d5f /CHANGELOG.md
parentb55c1815f175dec07d94c8f7f2dbbd01d4832caa (diff)
feat(macros): allow `#[renderer]` to accept any return type
Diffstat (limited to 'CHANGELOG.md')
-rw-r--r--CHANGELOG.md25
1 files changed, 25 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a3493b0..17c0596 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -116,6 +116,31 @@ None
These implementations make `RenderResult` more flexible as a return type, allowing renderer functions to return simple values without manually constructing a `RenderResult` via `new()` and `write!`/`writeln!`.
+5. **[`macros:renderer`]** Removed the restriction that `#[renderer]` functions must return `RenderResult`. The `#[renderer]` macro now accepts any return type (including no return type), and automatically converts the return value to `RenderResult` via `Into::into`.
+
+ - Functions returning `RenderResult` work as before.
+ - Functions returning other types (e.g., `String`, `i32`, `()`) are converted via the `Into<RenderResult>` trait.
+ - Functions with no return type (`-> ()` or omitted) return `()` which is converted to an empty `RenderResult` via `From<()>`.
+
+ This makes `#[renderer]` more flexible and consistent with the ergonomic `From` implementations added in item 4 above.
+
+ ```rust
+ #[renderer]
+ fn render_greeting(prev: ResultGreeting) -> String {
+ format!("Hello, {}!", *prev)
+ }
+
+ #[renderer]
+ fn render_exit_code(prev: ResultExit) -> i32 {
+ 42
+ }
+
+ #[renderer]
+ fn render_void(prev: ResultVoid) {
+ // side effects only, returns empty RenderResult
+ }
+ ```
+
#### **BREAKING CHANGES** (API CHANGES):
1. **[`macros:renderer`]** **[`macros:help`]** Removed `r_println!` and `r_print!` macros. The `#[renderer]` and `#[help]` macros no longer implicitly inject an internal `RenderResult` variable or provide `r_println!` / `r_print!` macros.