As you have seen in the previous chapters, we used concepts that were not really obvious, and doing certain things that would normally be easy to do aren't that easy when using GTK+ with Rust. These are some of the many reasons to use relm.
Reasons to use relm instead of gtk-rs directly
State mutation
It might not be clear from the previous chapter, but we indirectly used Rc<RefCell<T>> to do state mutation. Indeed, our Playlist type contains a RefCell<Option<String>> and we wrapped our Playlist inside a reference-counted pointer. This was to be able to mutate the state in reaction to events, for instance playing the song when clicking the play button:
let playlist = self.playlist.clone()...