Crates.io | tilde |
lib.rs | tilde |
version | 0.0.4 |
source | src |
created_at | 2019-01-04 06:14:43.259013 |
updated_at | 2019-01-06 08:25:42.016826 |
description | Using ~ to provide syntax sugar for Rust. |
homepage | |
repository | https://github.com/oooutlk/tilde |
max_upload_size | |
id | 105384 |
size | 12,767 |
This tilde
crate utilizes the disused tilde operator ~
to generate
syntatic sugar for Rust program.
first_arg.~the_macro!(rest_args)
, which will
be desugared as the_macro!( first_arg, rest_args )
. As proposed in
simple postfix macros #2442,
first_arg
will be evaluated excactly once.macro_rules! inc { ($e:expr) => { $e+1 }}
Suppose i: i32
, The library user could write: i.~inc!()
,
i.clone().~inc!()
etc, which is a sugar as inc!( i )
and
inc!( i.clone() )
.
This feature is in compliance with RFC 2442:
macro_rules! log_value {
( $self:expr, $msg:expr ) => ({
$self.1.push_str( &format!( "{}:{}: {}: {:?}", file!(), line!(), $msg, $self.0 ));
$self
})
}
fn value<T: std::fmt::Debug>( x: T, log: &mut String ) -> (T,&mut String) {
log.push_str( &format!( "evaluated {:?}\n", x ));
( x, log )
}
tilde! {
#[test]
fn rfc_pr_2442() {
let mut log1 = String::new();
let mut log2 = String::new();
( value( "hello", &mut log1 ).~log_value!( "value" ).0.len(), &mut log2 ).~log_value!( "len" );
let log = format!( "{}\n{}", log1, log2 );
assert_eq!( log, r#"evaluated "hello"
tilde_derive/src/lib.rs:72: value: "hello"
tilde_derive/src/lib.rs:72: len: 5"#
);
}
}
first_arg.~the_fn(rest_args)
, which will
be desugared as the_fn!( first_arg, rest_args )
.fn inc( i: i32 ) -> i32 { i + 1 }
Suppose i: i32
, The library user could write: i.~inc()
,
i.clone().~inc()
etc, which is a sugar as inc( i )
and
inc( i.clone() )
.
More features will be added in the future.
Licensed under MIT.