tilde 0.0.3

Using ~ to provide syntax sugar for Rust.
Documentation

Purpose

This tilde crate utilizes the disused tilde operator ~ to generate syntatic sugar for Rust program.

Features

  1. Postfix macro. The syntax is 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.

Example: Postfix macro

    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"#
        );
    }
}

More features will be added in the future.

License

Licensed under MIT.