Crates.io | case_clause |
lib.rs | case_clause |
version | 0.1.3 |
created_at | 2025-05-23 19:33:41.751217+00 |
updated_at | 2025-05-27 07:03:38.512774+00 |
description | case clause macro for rust |
homepage | https://gitlab.com/rust_projects3505446/case_clause# |
repository | |
max_upload_size | |
id | 1686648 |
size | 10,401 |
The purpose of the macro implemented here is to create an alternative to huge if else
cascades.
The Idea is based on haskell case clauses:
sign x | x > 0 = 1
| x == 0 = 0
| x < 0 = -1
This would normally look like this in Rust:
if x > 0 {
1
} else if x == 0 {
0
} else if x < 0 {
-1
}
If you now want to display this using a match case, which is normally the environment in rust for pattern matching, it looks like this:
match x {
if x > 0 => 1,
if x == 0 => 0,
if x < 0 => -1,
_ => 0,
}
I found both solutions extremely clunky and therefore tiring to work with. That's why the macro from this crate works like this:
case!(
x > 0 => 1,
x == 0 => 0,
x < 0 => -1,
true => 0,
)
To be fair, this is a first step towards creating a more elegant alternative to rust's match
environment, which still works elegantly when processing boolean values.
If you're in a cargo project, you can add this to your Cargo.toml
:
cargo add case_clause
Inside your rust project, you can call this macro like so:
import case_clause::case;
Best regards, my fellow rustaceans! :)