You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Michele Sessa 0af2665526 docs(car_rental): make the goals more clear 2 years ago
..
README.md docs(car_rental): make the goals more clear 2 years ago

README.md

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, introducing the concept of interior mutability.

To accomplish that you will create some associated methods of RentalBusiness that will return the field car in many different ways.

Expected Functions and Structures

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:

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:

$ 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