Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- macro_rules! update {
- (&$data:ident, $( $key:ident = $x:expr ),*) => (
- {
- fn clone<T>(data: &T) -> T
- where T: Clone {
- data.clone()
- }
- let cp = clone(&$data);
- update!(cp, $( $key = $x ),*)
- }
- );
- ($data:ident, $( $key:ident = $x:expr ),*) => (
- {
- let mut data_m = $data;
- $(
- data_m.$key=$x;
- )*
- data_m
- }
- );
- ($data_e:expr, $( $key:ident = $x:expr ),*) => (
- {
- let data = $data_e;
- update!(data, $( $key = $x ),*)
- }
- );
- }
- #[derive(Debug, Clone, Default)]
- struct Point {
- x: i64,
- y: i64,
- s: String,
- }
- fn main() {
- let u = update!(Point::default(), x = 10);
- println!("{:?}", u);
- }
Add Comment
Please, Sign In to add comment