| Crates.io | clonelicious |
| lib.rs | clonelicious |
| version | 2.2.6 |
| created_at | 2025-01-17 15:09:51.022756+00 |
| updated_at | 2025-09-08 03:41:28.798659+00 |
| description | A Rust macro library that simplifies cloning and closure execution. The `clone!` macro automatically clones variables and immediately executes the closure with the cloned values, streamlining common patterns in Rust programming. |
| homepage | |
| repository | https://github.com/crates-dev/clonelicious |
| max_upload_size | |
| id | 1520675 |
| size | 23,539 |
A Rust macro library that simplifies cloning and closure execution. The
clone!macro automatically clones variables and immediately executes the closure with the cloned values, streamlining common patterns in Rust programming.
To install clonelicious run cmd:
cargo add clonelicious
use clonelicious::*;
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res: String = clone!(s1, s2 => {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}", s1, s2)
});
assert_eq!(res, format!("{} {}", s1, s2));
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res: String = clone!(s1, s2 => async move {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}", s1, s2)
})
.await;
assert_eq!(res, format!("{} {}", s1, s2));
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res = clone!(s1, s2 => |data| {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}{}", s1, s2, data)
});
assert_eq!(res("!"), format!("{} {}{}", s1, s2, "!"));
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res = clone!(s1, s2 => |data| async move {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}{}", s1, s2, data)
});
assert_eq!(res("!").await, String::from("Hello World!"));
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res = clone!(s1, s2 => |data: &str| {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}{}", s1, s2, data)
});
assert_eq!(res("!"), format!("{} {}{}", s1, s2, "!"));
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res = clone!(s1, s2 => |data: String| async move {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}{}", s1, s2, data)
});
assert_eq!(res("!".to_owned()).await, format!("{} {}{}", s1, s2, "!"));
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res = clone!(s1, s2 => move |data| {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}{}", s1, s2, data)
});
assert_eq!(res("!"), format!("{} {}{}", s1, s2, "!"));
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res = clone!(s1, s2 => move |data| async move {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}{}", s1, s2, data)
});
assert_eq!(res("!").await, format!("{} {}{}", s1, s2, "!"));
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res = clone!(s1, s2 => move |data: &str| {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}{}", s1, s2, data)
});
assert_eq!(res("!"), format!("{} {}{}", s1, s2, "!"));
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res = clone!(s1, s2 => move |data: String| async move {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}{}", s1, s2, data)
});
assert_eq!(res("!".to_owned()).await, format!("{} {}{}", s1, s2, "!"));
This project is licensed under the MIT License. See the LICENSE file for details.
Contributions are welcome! Please open an issue or submit a pull request.
For any inquiries, please reach out to the author at root@ltpp.vip.