@@ -181,7 +181,7 @@ impl Client {
181
181
/// });
182
182
/// ```
183
183
pub fn time < F , R > ( & self , metric : & str , callable : F ) -> R
184
- where F : Fn ( ) -> R
184
+ where F : FnOnce ( ) -> R
185
185
{
186
186
let start = time:: Instant :: now ( ) ;
187
187
let return_val = callable ( ) ;
@@ -354,7 +354,7 @@ impl Pipeline {
354
354
/// });
355
355
/// ```
356
356
pub fn time < F > ( & mut self , metric : & str , callable : F )
357
- where F : Fn ( )
357
+ where F : FnOnce ( )
358
358
{
359
359
let start = time:: Instant :: now ( ) ;
360
360
callable ( ) ;
@@ -496,17 +496,45 @@ mod test {
496
496
let host = next_test_ip4 ( ) ;
497
497
let server = make_server ( & host) ;
498
498
let client = Client :: new ( & host, "myapp" ) . unwrap ( ) ;
499
+ struct TimeTest {
500
+ num : u8 ,
501
+ } ;
499
502
500
- let output = client. time ( "metric" , || {
503
+ let mut t = TimeTest { num : 10 } ;
504
+ let output = client. time ( "time_block" , || {
505
+ t. num += 2 ;
501
506
"a string"
502
507
} ) ;
503
508
504
509
let response = server_recv ( server) ;
505
510
assert_eq ! ( output, "a string" ) ;
506
- assert ! ( response. contains( "myapp.metric" ) ) ;
511
+ assert_eq ! ( t. num, 12 ) ;
512
+ assert ! ( response. contains( "myapp.time_block" ) ) ;
507
513
assert ! ( response. contains( "|ms" ) ) ;
508
514
}
509
515
516
+ #[ test]
517
+ fn test_pipeline_sending_time_block ( ) {
518
+ let host = next_test_ip4 ( ) ;
519
+ let server = make_server ( & host) ;
520
+ let client = Client :: new ( & host, "myapp" ) . unwrap ( ) ;
521
+ let mut pipeline = client. pipeline ( ) ;
522
+ pipeline. gauge ( "metric" , 9.1 ) ;
523
+ struct TimeTest {
524
+ num : u8 ,
525
+ } ;
526
+
527
+ let mut t = TimeTest { num : 10 } ;
528
+ pipeline. time ( "time_block" , || {
529
+ t. num += 2 ;
530
+ } ) ;
531
+ pipeline. send ( & client) ;
532
+
533
+ let response = server_recv ( server) ;
534
+ assert_eq ! ( t. num, 12 ) ;
535
+ assert_eq ! ( "myapp.metric:9.1|g\n myapp.time_block:0|ms" , response) ;
536
+ }
537
+
510
538
#[ test]
511
539
fn test_pipeline_sending_gauge ( ) {
512
540
let host = next_test_ip4 ( ) ;
0 commit comments