| Crates.io | inline_tweak |
| lib.rs | inline_tweak |
| version | 1.2.2 |
| created_at | 2020-08-30 10:24:50.049862+00 |
| updated_at | 2025-04-09 15:09:22.270095+00 |
| description | Tweak values directly from the source code |
| homepage | |
| repository | https://github.com/Uriopass/inline_tweak |
| max_upload_size | |
| id | 282604 |
| size | 55,851 |

Tweak any literal directly from your code, changes to the source appear while running the program.
It works by parsing the file when a change occurs.
The library is minimal with 0 dependencies.
In release mode, the tweaking code is disabled and compiled away.
The derive feature exposes a proc macro to turn all literals from a function body into tweakable values.
inline_tweak is based on this blogpost by tuxedo labs.
use inline_tweak::*;
fn main() {
loop {
println!("{}", tweak!(3.14)); // Try changing the value while the application is running
}
}
The derive feature allows to tweak any number/bool/char literal in a function.
It avoids cluttering the code with inline_tweak::tweak! calls.
#[inline_tweak::tweak_fn]
fn main() {
loop {
let v = 1.0; // Try changing this value!
println!("{}", v);
std::thread::sleep(Duration::from_millis(200)); // or even this value :)
}
}
Note that it requires syn/quote/proc_macro2 dependencies which makes the crate slower to compile.
Contrary to tweak!, it does not allow tweaking literals in macro calls (like println!), as it cannot reliably replace literals by a function call since macros can have custom syntax.
inline_tweak provides a watch!() macro that sleeps until the file is modified, akin to a breakpoint:
use inline_tweak::*;
fn main() {
loop {
println!("{}", tweak!("hello world"));
watch!(); // The thread will sleep here until anything in the file changes
}
}
inline_tweak allows to tweak expressions by providing a value later.
For example:
tweak!(rng.gen_range(0.0, 1.0))
can then be replaced by a constant value by modifying the file (even while the application is running) to
tweak!(5.0; rng.gen_range(0.0, 1.0)) // will always return 5.0
See the "expression" example in action
Note that this works only for expressions that return a tweakable type. (number/boolean literals)
The release_tweak! macro acts exactly like tweak! except that it also works in release mode.
It is accessible behind the feature flag "release_tweak" which is not enabled by default.
Simply add this line to your Cargo.toml
inline_tweak = "1.0.10"