mirror of https://github.com/01-edu/public.git
Michele Sessa
2 years ago
committed by
Michele
1 changed files with 89 additions and 0 deletions
@ -0,0 +1,89 @@
|
||||
## car_rental |
||||
|
||||
### Instructions |
||||
|
||||
Create a struct named `Car` and another one named `RentalBusiness`. |
||||
|
||||
The scope of the exercise will be to modify and operate on the `Car` in the `RentalBusiness` even if this element is not declared as mutable. |
||||
|
||||
### Expected Functions and Structures |
||||
|
||||
```rust |
||||
use std::cell::Ref; |
||||
use std::cell::RefCell; |
||||
use std::cell::RefMut; |
||||
|
||||
#[derive(Debug, Default, PartialEq, Eq)] |
||||
pub struct Car { |
||||
pub color: String, |
||||
pub plate: String, |
||||
} |
||||
|
||||
#[derive(Debug)] |
||||
pub struct RentalBusiness { |
||||
pub car: RefCell<Car>, |
||||
} |
||||
|
||||
impl RentalBusiness { |
||||
pub fn rent_car(&self) -> Ref<Car> {} |
||||
pub fn sell_car(&self) -> Car {} |
||||
pub fn repair_car(&self) -> RefMut<Car> {} |
||||
pub fn change_car(&self, new_car: Car) {} |
||||
} |
||||
``` |
||||
|
||||
### Usage |
||||
|
||||
Here is a program to test your function: |
||||
|
||||
```rust |
||||
use car_rental::*; |
||||
use std::cell::RefCell; |
||||
|
||||
fn main() { |
||||
let car_rental = RentalBusiness { |
||||
car: RefCell::new(Car { |
||||
color: "red".to_string(), |
||||
plate: "AAA".to_string(), |
||||
}), |
||||
}; |
||||
|
||||
println!("{:?}", car_rental.rent_car()); |
||||
println!("{:?}", car_rental.repair_car()); |
||||
|
||||
{ |
||||
let mut car = car_rental.repair_car(); |
||||
car.color = "blue".to_string(); |
||||
} |
||||
|
||||
println!("{:?}", car_rental.rent_car()); |
||||
|
||||
car_rental.change_car(Car { |
||||
color: "pink".to_string(), |
||||
plate: "WWW".to_string(), |
||||
}); |
||||
|
||||
println!("{:?}", car_rental.rent_car()); |
||||
|
||||
println!("{:?}", car_rental.sell_car()); |
||||
println!("{:?}", car_rental.sell_car()); |
||||
} |
||||
``` |
||||
|
||||
And its output: |
||||
|
||||
```console |
||||
$ cargo run |
||||
Car { color: "red", plate: "AAA" } |
||||
Car { color: "red", plate: "AAA" } |
||||
Car { color: "blue", plate: "AAA" } |
||||
Car { color: "pink", plate: "WWW" } |
||||
Car { color: "pink", plate: "WWW" } |
||||
Car { color: "", plate: "" } |
||||
$ |
||||
``` |
||||
|
||||
### Notions |
||||
|
||||
- [std::cell::RefCell](https://doc.rust-lang.org/std/cell/struct.RefCell.html) |
||||
- [Struct std::rc::Rc](https://doc.rust-lang.org/std/rc/struct.Rc.html) |
Loading…
Reference in new issue