c-arrow 0.1.4

This Rust library allows you to use the arrow operator -> to access the field of the row pointer, just like C/C++.
Documentation
#[macro_export]
macro_rules! pt {
    [ $func:ident($($args:expr),*) $($other:tt)+] => {{
        let mut temp = $func($($args),*);
        pt![temp $($other)+]
    }};
    [ $a:ident . $b:ident $(($($args:expr),*))?. $($other:tt)+] => {{
        let mut temp = &mut $a.$b$(($($args),*))?;
        ref_pt![temp . $($other)+]
    }};
    [ $a:ident . $b:ident $(($($args:expr),*))?-> $($other:tt)+] => {{
        let mut temp = &mut $a.$b$(($($args),*))?;
        ref_pt![temp -> $($other)+]
    }};
    [ $a:ident -> $b:ident $(($($args:expr),*))?. $($other:tt)+] => {{
        let mut temp = &mut (*$a).$b$(($($args),*))?;
        ref_pt![temp . $($other)+]
    }};
    [ $a:ident -> $b:ident $(($($args:expr),*))?-> $($other:tt)+] => {{
        let mut temp = &mut (*$a).$b$(($($args),*))?;
        ref_pt![temp -> $($other)+]
    }};
    [ $a:ident . $b:ident $(($($args:expr),*))? ] => {{
        &mut $a.$b$(($($args),*))?
    }};
    [ $a:ident -> $b:ident $(($($args:expr),*))? ] => {{
        &mut (*$a).$b$(($($args),*))?
    }};

    [ $a:ident . $b:ident $(($($args:expr),*))? = $c:ident $($other:tt)+] => {{
        $a.$b$(($($args),*))? = *pt![$c $($other)+];
    }};
    [ $a:ident -> $b:ident $(($($args:expr),*))? = $c:ident $($other:tt)+] => {{
        (*$a).$b$(($($args),*))? = *pt![$c $($other)+];
    }};
    [ $a:ident . $b:ident $(($($args:expr),*))? = $c:expr] => {{
        $a.$b$(($($args),*))? = $c;
    }};
    [ $a:ident -> $b:ident $(($($args:expr),*))? = $c:expr] => {{
        (*$a).$b$(($($args),*))? = $c;
    }};
}

#[macro_export]
macro_rules! ref_pt {
    [ $a:ident . $b:ident $(($($args:expr),*))?. $($other:tt)+] => {{
        let mut temp = &mut (*$a).$b$(($($args),*))?;
        ref_pt![temp . $($other)+]
    }};
    [ $a:ident . $b:ident $(($($args:expr),*))?-> $($other:tt)+] => {{
        let mut temp = &mut (*$a).$b$(($($args),*))?;
        ref_pt![temp -> $($other)+]
    }};
    [ $a:ident -> $b:ident $(($($args:expr),*))?. $($other:tt)+] => {{
        let mut temp = &mut (**$a).$b$(($($args),*))?;
        ref_pt![temp . $($other)+]
    }};
    [ $a:ident -> $b:ident $(($($args:expr),*))?-> $($other:tt)+] => {{
        let mut temp = &mut (**$a).$b$(($($args),*))?;
        ref_pt![temp -> $($other)+]
    }};
    [ $a:ident . $b:ident $(($($args:expr),*))? ] => {{
        &mut (*$a).$b$(($($args),*))?
    }};
    [ $a:ident -> $b:ident $(($($args:expr),*))? ] => {{
        &mut (**$a).$b$(($($args),*))?
    }};

    [ $a:ident . $b:ident $(($($args:expr),*))? = $c:ident $($other:tt)+] => {{
        (*$a).$b$(($($args),*))? = *pt![$c $($other)+];
    }};
    [ $a:ident -> $b:ident $(($($args:expr),*))? = $c:ident $($other:tt)+] => {{
        (**$a).$b$(($($args),*))? = *pt![$c $($other)+];
    }};
    [ $a:ident . $b:ident $(($($args:expr),*))? = $c:expr] => {{
        (*$a).$b$(($($args),*))? = $c;
    }};
    [ $a:ident -> $b:ident $(($($args:expr),*))? = $c:expr] => {{
        (**$a).$b$(($($args),*))? = $c;
    }};
}