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.
 
 
 
 
 
 

1.9 KiB

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

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