Macro update

Source
macro_rules! update {
    (connection => $connection:expr,model : $model:expr
    $(,select:{
        $($select:expr),*
    })?
      ,data:{
        $($from:expr => $data:expr),*
    }
    $(,conditions:{
        $(and => {$($conditions:expr => $value:expr),*})?
        $(,)?
        $(or => {$($conditions_or:expr => $value_or:expr),*})?
    })?
    $(
        ,between => {
            $(and => {
                $($between:expr => {$between_value:expr => $between_value2:expr}),*
            })?
            $(,)?
            $(or => {
                $($between_or:expr => {$between_value_or:expr => $between_value2_or:expr}),*
            })?
        }
    )?
    ) => { ... };
    (connection => $connection:expr,
        model:$model:expr,
        match:$model_value:expr
        $(,select:{
            $($select:expr),*
        })?
        $(,conditions:{
            $(and => {$($conditions:expr => $value:expr),*})?
            $(or => {$($conditions_or:expr => $value_or:expr),*})?
        })?
        $(
            ,between => {
                $(and => {
                    $($between:expr => {$between_value:expr => $between_value2:expr}),*
                })?
                $(,)?
                $(or => {
                    $($between_or:expr => {$between_value_or:expr => $between_value2_or:expr}),*
                })?
            }
        )?
        ,inside:
        {
            $from:expr => {
                match:$match:expr,
                data:{
                    $($data_from:expr => $data_value:expr),*
                }
                // $(,)?
                $(,conditions : {
                    $(and => {$($and_from_key:expr => $and_from_value:expr),*})?
                    $(,)?
                    $(or => {$($or_from_key:expr => $or_from_value:expr),*})?
                })?
                $(,)?
                $(
                    ,select:{
                    $(
                        $select_from:expr
                    ),*
                    }
                )?
                $(
                    ,between => {
                        $(and => {
                            $($from_between:expr => {$from_between_value:expr => $from_between_value2:expr}),*
                        })?
                        $(,)?
                        $(or => {
                            $($from_between_or:expr => {$from_between_value_or:expr => $from_between_value2_or:expr}),*
                        })?
                    }
                )?
            }
        }
        ) => { ... };
}
Expand description

§Example

let update = update! {
    connection => postgres,
    model:"place",
    select:{
        "id"
    },
    data:{
        "name" => "billionairehari"
    },
    conditions:{
        and => {
            "name" => "billionairehari"
        },
        or => {
            "" => ""
        }
    }
};

§Usage

let update = update! {
       connection => postgres,
       model:"billionaires",
       match:"id",
       inside:{
           "place"  => {
               match:   user_id",
               conditions:{
                   and => {
                       "name" => "billionaires",
                        user_id" => "c4a97a50-8679-4f85-a1d8-5bba0113b596"
                   }
               },
               data:{
                   "name" => "billionairehari"
               },
               select:{
                   "name"
               }
           }
       }
   };