Add the following associated functions to `Tracker`:
-`new`: that initializes the structure.
-`set_value`: that sets the `value`. It should compare the number of references to `value` and `max` to work out the percentage used. It should write to the following traits if it exceeds the specified usage percentage:
- percentage >= 100%: `"Error: you are over your quota!"` should be written to `error`.
- percentage >= 70% and percentage <100%:`"Warning: you have used up over X% of your quota! Proceeds with precaution"`shouldbewrittento`warning`,where`X`shouldbereplacedwiththecalculatedpercentage.
-`peek`: that will take a peek at how much usage the variable already has. It should write `"Info: you are using up too X% of your quote"` to the `info` trait function. `X` should be replaced with the calculated percentage.
Create the `Worker` structure with the following fields:
-`track_value`: which is the value that will be tracked by the tracker.
-`mapped_messages`: that will store the latest messages from the `Logger` trait functions. This will be a HashMap. The key will represent the type of message (`info`, `error` or `warning`), and the value will be the actual message.
-`all_messages`: that will be a vector of **all** messages sent.
Create the following associated functions for `Worker`:
-`new`: that initializes a `Worker` structure.
-`Logger`: to use the trait `Logger`, you must implement it for the `Worker` structure. Each function (`warning`, `error` and `info`) must insert the message to the respective field of the `Worker` structure.
You must use **interior mutability**, this means it must be possible to mutate data, even when there are immutable references to that data. Consequently, the user will not need to use the keyword `mut`. *tip:* RefCell.