Skip to content

Commit e00cb74

Browse files
authored
Merge pull request #17 from urjitbhatia/master
Client time closure should be FnOnce
2 parents e7c0a39 + b1625ab commit e00cb74

File tree

1 file changed

+32
-4
lines changed

1 file changed

+32
-4
lines changed

src/client.rs

+32-4
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ impl Client {
181181
/// });
182182
/// ```
183183
pub fn time<F, R>(&self, metric: &str, callable: F) -> R
184-
where F: Fn() -> R
184+
where F: FnOnce() -> R
185185
{
186186
let start = time::Instant::now();
187187
let return_val = callable();
@@ -354,7 +354,7 @@ impl Pipeline {
354354
/// });
355355
/// ```
356356
pub fn time<F>(&mut self, metric: &str, callable: F)
357-
where F: Fn()
357+
where F: FnOnce()
358358
{
359359
let start = time::Instant::now();
360360
callable();
@@ -496,17 +496,45 @@ mod test {
496496
let host = next_test_ip4();
497497
let server = make_server(&host);
498498
let client = Client::new(&host, "myapp").unwrap();
499+
struct TimeTest {
500+
num: u8,
501+
};
499502

500-
let output = client.time("metric", || {
503+
let mut t = TimeTest{num: 10};
504+
let output = client.time("time_block", || {
505+
t.num += 2;
501506
"a string"
502507
});
503508

504509
let response = server_recv(server);
505510
assert_eq!(output, "a string");
506-
assert!(response.contains("myapp.metric"));
511+
assert_eq!(t.num, 12);
512+
assert!(response.contains("myapp.time_block"));
507513
assert!(response.contains("|ms"));
508514
}
509515

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\nmyapp.time_block:0|ms", response);
536+
}
537+
510538
#[test]
511539
fn test_pipeline_sending_gauge() {
512540
let host = next_test_ip4();

0 commit comments

Comments
 (0)