@@ -80,48 +80,54 @@ pub use uuid;
8080#[ macro_export]
8181macro_rules! params {
8282 ( ) => { } ;
83- ( @to_pair $name: expr => $value: expr) => (
84- ( std:: string:: String :: from( $name) , $crate:: value:: Value :: from( $value) )
83+ ( @to_pair $map: expr, $name: expr => $value: expr) => (
84+ $map. insert(
85+ std:: string:: String :: from( $name) ,
86+ $crate:: value:: Value :: from( $value) ,
87+ )
8588 ) ;
86- ( @to_pair $name: ident) => (
87- ( std:: string:: String :: from( stringify!( $name) ) , $crate:: value:: Value :: from( $name) )
89+ ( @to_pair $map: expr, $name: ident) => (
90+ $map. insert(
91+ std:: string:: String :: from( stringify!( $name) ) ,
92+ $crate:: value:: Value :: from( $name) ,
93+ )
8894 ) ;
89- ( @expand $vec : expr; ) => { } ;
90- ( @expand $vec : expr; $name: expr => $value: expr, $( $tail: tt) * ) => {
91- $vec . push ( params!( @to_pair $name => $value) ) ;
92- params!( @expand $vec ; $( $tail) * ) ;
95+ ( @expand $map : expr; ) => { } ;
96+ ( @expand $map : expr; $name: expr => $value: expr, $( $tail: tt) * ) => {
97+ params!( @to_pair $map , $ name => $value) ;
98+ params!( @expand $map ; $( $tail) * ) ;
9399 } ;
94- ( @expand $vec : expr; $name: expr => $value: expr $( , $tail: tt) * ) => {
95- $vec . push ( params!( @to_pair $name => $value) ) ;
96- params!( @expand $vec ; $( $tail) * ) ;
100+ ( @expand $map : expr; $name: expr => $value: expr $( , $tail: tt) * ) => {
101+ params!( @to_pair $map , $ name => $value) ;
102+ params!( @expand $map ; $( $tail) * ) ;
97103 } ;
98- ( @expand $vec : expr; $name: ident, $( $tail: tt) * ) => {
99- $vec . push ( params!( @to_pair $name) ) ;
100- params!( @expand $vec ; $( $tail) * ) ;
104+ ( @expand $map : expr; $name: ident, $( $tail: tt) * ) => {
105+ params!( @to_pair $map , $ name) ;
106+ params!( @expand $map ; $( $tail) * ) ;
101107 } ;
102- ( @expand $vec : expr; $name: ident $( , $tail: tt) * ) => {
103- $vec . push ( params!( @to_pair $name) ) ;
104- params!( @expand $vec ; $( $tail) * ) ;
108+ ( @expand $map : expr; $name: ident $( , $tail: tt) * ) => {
109+ params!( @to_pair $map , $ name) ;
110+ params!( @expand $map ; $( $tail) * ) ;
105111 } ;
106112 ( $i: ident, $( $tail: tt) * ) => {
107113 {
108- let mut output = std:: vec :: Vec :: new ( ) ;
109- params!( @expand output ; $i, $( $tail) * ) ;
110- output
114+ let mut map : std :: collections :: HashMap <std :: string :: String , $crate :: value :: Value , _> = std:: default :: Default :: default ( ) ;
115+ params!( @expand ( & mut map ) ; $i, $( $tail) * ) ;
116+ $crate :: params :: Params :: Named ( map )
111117 }
112118 } ;
113119 ( $i: expr => $( $tail: tt) * ) => {
114120 {
115- let mut output = std:: vec :: Vec :: new ( ) ;
116- params!( @expand output ; $i => $( $tail) * ) ;
117- output
121+ let mut map : std :: collections :: HashMap <std :: string :: String , $crate :: value :: Value , _> = std:: default :: Default :: default ( ) ;
122+ params!( @expand ( & mut map ) ; $i => $( $tail) * ) ;
123+ $crate :: params :: Params :: Named ( map )
118124 }
119125 } ;
120126 ( $i: ident) => {
121127 {
122- let mut output = std:: vec :: Vec :: new ( ) ;
123- params!( @expand output ; $i) ;
124- output
128+ let mut map : std :: collections :: HashMap <std :: string :: String , $crate :: value :: Value , _> = std:: default :: Default :: default ( ) ;
129+ params!( @expand ( & mut map ) ; $i) ;
130+ $crate :: params :: Params :: Named ( map )
125131 }
126132 }
127133}
@@ -170,70 +176,73 @@ pub mod value;
170176#[ cfg( test) ]
171177#[ test]
172178fn params_macro_test ( ) {
173- use crate :: value:: Value ;
179+ use crate :: { params :: Params , value:: Value } ;
174180
175181 let foo = 42 ;
176182 let bar = "bar" ;
177183
178- assert_eq ! ( vec![ ( String :: from( "foo" ) , Value :: Int ( 42 ) ) ] , params! { foo } ) ;
179184 assert_eq ! (
180- vec![ ( String :: from( "foo" ) , Value :: Int ( 42 ) ) ] ,
185+ Params :: from( vec![ ( String :: from( "foo" ) , Value :: Int ( 42 ) ) ] ) ,
186+ params! { foo }
187+ ) ;
188+ assert_eq ! (
189+ Params :: from( vec![ ( String :: from( "foo" ) , Value :: Int ( 42 ) ) ] ) ,
181190 params! { foo, }
182191 ) ;
183192 assert_eq ! (
184- vec![
193+ Params :: from ( vec![
185194 ( String :: from( "foo" ) , Value :: Int ( 42 ) ) ,
186195 ( String :: from( "bar" ) , Value :: Bytes ( ( & b"bar" [ ..] ) . into( ) ) ) ,
187- ] ,
196+ ] ) ,
188197 params! { foo, bar }
189198 ) ;
190199 assert_eq ! (
191- vec![
200+ Params :: from ( vec![
192201 ( String :: from( "foo" ) , Value :: Int ( 42 ) ) ,
193202 ( String :: from( "bar" ) , Value :: Bytes ( ( & b"bar" [ ..] ) . into( ) ) ) ,
194- ] ,
203+ ] ) ,
195204 params! { foo, bar, }
196205 ) ;
197206 assert_eq ! (
198- vec![
207+ Params :: from ( vec![
199208 ( String :: from( "foo" ) , Value :: Int ( 42 ) ) ,
200209 ( String :: from( "bar" ) , Value :: Bytes ( ( & b"bar" [ ..] ) . into( ) ) ) ,
201- ] ,
210+ ] ) ,
202211 params! { "foo" => foo, "bar" => bar }
203212 ) ;
204213 assert_eq ! (
205- vec![
214+ Params :: from ( vec![
206215 ( String :: from( "foo" ) , Value :: Int ( 42 ) ) ,
207216 ( String :: from( "bar" ) , Value :: Bytes ( ( & b"bar" [ ..] ) . into( ) ) ) ,
208- ] ,
217+ ] ) ,
209218 params! { "foo" => foo, "bar" => bar, }
210219 ) ;
211220 assert_eq ! (
212- vec![
221+ Params :: from ( vec![
213222 ( String :: from( "foo" ) , Value :: Int ( 42 ) ) ,
214223 ( String :: from( "bar" ) , Value :: Bytes ( ( & b"bar" [ ..] ) . into( ) ) ) ,
215- ] ,
224+ ] ) ,
216225 params! { foo, "bar" => bar }
217226 ) ;
218227 assert_eq ! (
219- vec![
228+ Params :: from ( vec![
220229 ( String :: from( "foo" ) , Value :: Int ( 42 ) ) ,
221230 ( String :: from( "bar" ) , Value :: Bytes ( ( & b"bar" [ ..] ) . into( ) ) ) ,
222- ] ,
231+ ] ) ,
223232 params! { "foo" => foo, bar }
224233 ) ;
225234 assert_eq ! (
226- vec![
235+ Params :: from ( vec![
227236 ( String :: from( "foo" ) , Value :: Int ( 42 ) ) ,
228237 ( String :: from( "bar" ) , Value :: Bytes ( ( & b"bar" [ ..] ) . into( ) ) ) ,
229- ] ,
238+ ] ) ,
230239 params! { foo, "bar" => bar, }
231240 ) ;
232241 assert_eq ! (
233- vec![
242+ Params :: from ( vec![
234243 ( String :: from( "foo" ) , Value :: Int ( 42 ) ) ,
235244 ( String :: from( "bar" ) , Value :: Bytes ( ( & b"bar" [ ..] ) . into( ) ) ) ,
236- ] ,
245+ ] ) ,
237246 params! { "foo" => foo, bar, }
238247 ) ;
239248}
0 commit comments