Crates.io | anyrust |
lib.rs | anyrust |
version | 0.4.1 |
source | src |
created_at | 2024-05-08 15:47:10.852085 |
updated_at | 2024-06-10 17:02:50.236684 |
description | any rust |
homepage | https://github.com/myyrakle/anyrust/blob/master/README.md |
repository | https://github.com/myyrakle/anyrust |
max_upload_size | |
id | 1233899 |
size | 92,131 |
A library that provides a type system as flexible and powerful as Javascript.
Usage is simple and intuitive. All you have to do is box the value into the anyrust::Any type and use it appropriately.
Below is a simple example.
use anyrust::*;
fn main() {
let a = any(5);
let b = any("10");
let result = a + b;
println!("result: {result}"); // result: 510
}
The basic integer type, basic float type, boolean type, and string type support mutual conversion with Any without any problem.
Arrays are supported through the anyrust::Array
type. This is compatible with Vec<Any>
.
let mut arr = array![1, 2, 3, 4, 5];
arr.push(4444);
arr.push("foo");
for e in arr {
println!("{e}");
}
KV Map is supported through the anyrust::Map
type. This is compatible with HashMap<Any,Any>
.
let mut map = map!{
"name" => "John Doe",
"age" => 30,
};
map.set("is_adult", true);
println!("{}", map.to_string());
for (k, v) in map.to_map() {
println!("{}: {}", k, v);
}
Function types are provided through the Function
type. You can easily create it with the function!
macro.
let add = function!(lhs, rhs => {
lhs + rhs
});
let result = add.call(array![1, 2]);
println!("Result: {}", result);
let four: Any = function!( => {
let sum = any(4444);
sum
});
let result = four.call(array![]);
println!("Result: {}", result);
You can also use function composition through the >> operator.
let add = function!(lhs, rhs => {
println!("lhs: {}, rhs: {}", lhs, rhs);
lhs + rhs
});
let negative = function!(num => {
num * any(-1)
});
let composite = add >> negative;
let result = composite.call(params![1, 2]);
println!("Result: {}", result); // -3