Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. pub trait Messenger {
  2. fn send(&self, msg: &str);
  3. }
  4.  
  5. pub struct LimitTracker<'a, T: 'a + Messenger> {
  6. messenger: &'a T,
  7. value: usize,
  8. max: usize,
  9. }
  10.  
  11. impl<'a, T> LimitTracker<'a, T>
  12. where
  13. T: Messenger,
  14. {
  15. pub fn new(messenger: &T, max: usize) -> LimitTracker<T> {
  16. LimitTracker {
  17. messenger,
  18. value: 0,
  19. max,
  20. }
  21. }
  22.  
  23. pub fn set_value(&mut self, value: usize) {
  24. self.value = value;
  25.  
  26. let percentage_of_max = self.value as f64 / self.max as f64;
  27.  
  28. if percentage_of_max >= 0.75 && percentage_of_max < 0.9 {
  29. self.messenger.send("Warning: You've used up over 75% of your quota!");
  30. } else if percentage_of_max >= 0.9 && percentage_of_max < 1.0 {
  31. self.messenger.send("Urgent warning: You've used up over 90% of your quota!");
  32. } else if percentage_of_max >= 1.0 {
  33. self.messenger.send("Error: You are over your quota!");
  34. }
  35. }
  36. }
  37.  
  38. #[cfg(test)]
  39. mod tests {
  40. use super::*;
  41. use std::cell::RefCell;
  42.  
  43. struct MockMessenger {
  44. sent_messages: RefCell<Vec<String>>,
  45. }
  46.  
  47. impl MockMessenger {
  48. fn new() -> MockMessenger {
  49. MockMessenger { sent_messages: RefCell::new(vec![]) }
  50. }
  51. }
  52.  
  53. impl Messenger for MockMessenger {
  54. fn send(&self, message: &str) {
  55. // self.sent_messages.borrow_mut().push(String::from(message));
  56. let mut one_bollow = self.sent_messages.borrow_mut();
  57. let mut two_bollow = self.sent_messages.borrow_mut();
  58.  
  59. one_borrow.push(String::from(message));
  60. two_borrow.push(String::from(message));
  61. }
  62. }
  63.  
  64. #[test]
  65. fn it_sends_an_over_75_percent_warning_message() {
  66. let mock_messenger = MockMessenger::new();
  67. let mut limit_tracker = LimitTracker::new(&mock_messenger, 100);
  68.  
  69. limit_tracker.set_value(80);
  70.  
  71. assert_eq!(mock_messenger.sent_messages.borrow().len(), 1);
  72. }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement