This project provides simulation of anonymous struct and named arguments in
Rust, using proc macros structx!{}
, Structx!{}
, #[named_args]
and
args!{}
.
Add the following in your Cargo.toml file:
```toml [dependencies] structx = "0.1"
[package.metadata.inwelling] structx = true ```
Add the following in your .rs files:
rust
use structx::*;
If you want to use named arguments, add the following:
rust
use structx::named_args::*;
Anonymous structs are struct
s without the needs of providing struct names.
However, the field names are mandatory. Anonymous structs are of the same type
if and only if they are composed of the same set of field names. The order of
fields are irrelevant.
The notation of an anonymous struct's value is structx!{}
.
rust
let foo = structx!{ i: 3, b: true };
let bar = structx!{ x, y };
The notation of an anonymous struct's type is Structx!{}
.
rust
fn foo( x: i32, y: i32 ) -> Structx!{ x: i32, y: i32 } {
structx!{ x, y: y+1 }
}
Debug, PartialEq, Eq, PartialOrd, Ord, Hash.
rust
let a = structx!{ width : 800, height: 600 };
let b = structx!{ height: 600, width : 800 };
let c = structx!{ width : 1024, height: 768 };
assert_eq!( a, b );
assert_ne!( a, c );
At definition site, add attributes #[named_args]
to functions.
```rust
fn set_size( width: u32, height: u32 ) { todo!() } ```
At call site, wrap arguments with args!{}
.
rust
set_size( args!{ width: 1024, height: 768 });
Collecting types and values of anonymous structs from downstream crates makes crate structx depending on its users. Unfortunately this kind of reverse-dependency is not known to cargo. As a result, the modifications of .rs files which change types and values of anonymous structs will not cause recompilation of crate structx, which it should.
To address this issue, simply do cargo clean
, or more precisely,
cargo clean --package structx
before running cargo build
.
Under Apache License 2.0 or MIT License, at your will.