1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//! # Decider
//!
//! This module contains the [`Decider`] trait, which decides if a fault should
//! be injected for a given request or response. It adds a `decide` method that
//! returns a boolean based on the request.
//!
//! For primitive that implements this trait, such as `f64` and `bool`, it
//! doesn't look at the request.
//!
//! ## Example
//!
//! ```rust
//! use tower_fault::decider::Decider;
//! # struct MyRequest { value: u64 };
//! # impl MyRequest {
//! # fn new(value: u64) -> Self {
//! # Self { value }
//! # }
//! # }
//!
//! let my_request = MyRequest::new(6);
//!
//! // Always.
//! assert_eq!(true, true.decide(&my_request));
//!
//! // Never.
//! assert_eq!(false, false.decide(&my_request));
//!
//! // 30% of the time.
//! let decision = (0.3).decide(&my_request);
//!
//! // Based on the request, using a closure as decider.
//! let decision = (|req: &MyRequest| req.value % 2 == 0).decide(&my_request);
//! ```
use ;
/// Trait for deciding if a fault should be injected for a given request or
/// response.