optargs 0.1.2

Easily create macros for functions with optional arguments
Documentation
//! poc for struct builder

struct Example {
    a: i32,
    b: Option<&'static str>,
}
impl Example {
    fn build(mut self) -> bool {
        false
    }
}

#[doc(hidden)]
#[macro_export]
macro_rules! Example {
    ($($key:ident $(: $value:expr)? ), *) => {{
        let mut inners = (None, None);
        { $( Example!(@setter_helper inners $key $key $($value)? ) )* }
        Example {
            a: inners.0.unwrap(),
            b: inners.1
        }
    }};
    (@setter_helper $src:ident a $key:ident) => {
        $src.0 = Some($key);
    };

    (@setter_helper $src:ident a $key:ident $value:expr) => {
        $src.0 = Some($value);
    };

    (@setter_helper $src:ident b $key:ident) => {
        $src.1 = Some($key);
    };

    (@setter_helper $src:ident b $key:ident $value:expr) => {
        $src.1 = Some($value);
    };
}

fn main() {
    let p = Example! { a: 10 };
}