The protagonist of this recipe is RefCell, a wrapper around any type that moves the borrow checker's rule enforcement from compile time to runtime. The basics are pretty easy, you borrow the underlying value immutably by calling .borrow() and borrow it mutably by calling .borrow_mut(). If you don't follow the golden rule of only having multiple readers or one single writer at the same time, the program goes into panic!. One application for this is making members of your structs mutable even though your struct itself is immutable. The best use case to show where this is useful is mocking, the art of faking infrastructure for testing purposes.
The idea of our example is as follows, we want to send a newsletter to every customer that is interested. For that, we have the EmailSender trait[1], which just specifies a method to send an Email and return a response[2]. It's good practice to try to define functionality through traits in order to mock them.
Our publish_news...