@@ -281,6 +281,48 @@ mod test {
281281 Ok ( ( ) )
282282 }
283283
284+ #[ test]
285+ #[ cfg( feature = "chrono" ) ]
286+ fn test_append_struct_with_params ( ) -> Result < ( ) > {
287+ use chrono:: NaiveDate ;
288+
289+ struct Person {
290+ first_name : String ,
291+ last_name : String ,
292+ dob : NaiveDate ,
293+ }
294+
295+ let db = Connection :: open_in_memory ( ) ?;
296+
297+ db. execute_batch ( "CREATE TABLE foo(first_name VARCHAR, last_name VARCHAR, dob DATE);" ) ?;
298+
299+ let person1 = Person {
300+ first_name : String :: from ( "John" ) ,
301+ last_name : String :: from ( "Smith" ) ,
302+ dob : NaiveDate :: from_ymd_opt ( 1970 , 1 , 1 ) . unwrap ( ) ,
303+ } ;
304+
305+ let person2 = Person {
306+ first_name : String :: from ( "Jane" ) ,
307+ last_name : String :: from ( "Smith" ) ,
308+ dob : NaiveDate :: from_ymd_opt ( 1975 , 1 , 1 ) . unwrap ( ) ,
309+ } ;
310+
311+ // Use params! to extract struct fields
312+ {
313+ let persons = vec ! [ & person1, & person2] ;
314+ let mut app = db. appender ( "foo" ) ?;
315+ for p in & persons {
316+ app. append_row ( params ! [ & p. first_name, & p. last_name, p. dob] ) ?;
317+ }
318+ }
319+
320+ let count: i64 = db. query_row ( "SELECT count(*) FROM foo" , [ ] , |row| row. get ( 0 ) ) ?;
321+ assert_eq ! ( count, 2 ) ;
322+
323+ Ok ( ( ) )
324+ }
325+
284326 #[ test]
285327 fn test_appender_error ( ) -> Result < ( ) > {
286328 let conn = Connection :: open_in_memory ( ) ?;
0 commit comments