1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-07-05 22:19:01 +02:00

Comprehensive Rust v2 (#1073)

I've taken some work by @fw-immunant and others on the new organization
of the course and condensed it into a form amenable to a text editor and
some computational analysis. You can see the inputs in `course.py` but
the interesting bits are the output: `outline.md` and `slides.md`.

The idea is to break the course into more, smaller segments with
exercises at the ends and breaks in between. So `outline.md` lists the
segments, their duration, and sums those durations up per-day. It shows
we're about an hour too long right now! There are more details of the
segments in `slides.md`, or you can see mostly the same stuff in
`course.py`.

This now contains all of the content from the v1 course, ensuring both
that we've covered everything and that we'll have somewhere to redirect
every page.

Fixes #1082.
Fixes #1465.

---------

Co-authored-by: Nicole LeGare <dlegare.1001@gmail.com>
Co-authored-by: Martin Geisler <mgeisler@google.com>
This commit is contained in:
Dustin J. Mitchell
2023-11-29 10:39:24 -05:00
committed by GitHub
parent ea204774b6
commit 6d19292f16
309 changed files with 6807 additions and 4281 deletions

View File

@ -0,0 +1,107 @@
// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#![allow(dead_code)]
// ANCHOR: solution
#[derive(Debug)]
/// An event in the elevator system that the controller must react to.
enum Event {
/// A button was pressed.
ButtonPressed(Button),
/// The car has arrived at the given floor.
CarArrived(Floor),
/// The car's doors have opened.
CarDoorOpened,
/// The car's doors have closed.
CarDoorClosed,
}
/// A floor is represented as an integer.
type Floor = i32;
/// A direction of travel.
#[derive(Debug)]
enum Direction {
Up,
Down,
}
/// A user-accessible button.
#[derive(Debug)]
enum Button {
/// A button in the elevator lobby on the given floor.
LobbyCall(Direction, Floor),
/// A floor button within the car.
CarFloor(Floor),
}
// ANCHOR: car_arrived
/// The car has arrived on the given floor.
fn car_arrived(floor: i32) -> Event {
// END_ANCHOR: car_arrived
Event::CarArrived(floor)
}
// ANCHOR: car_door_opened
/// The car doors have opened.
fn car_door_opened() -> Event {
// END_ANCHOR: car_door_opened
Event::CarDoorOpened
}
// ANCHOR: car_door_closed
/// The car doors have closed.
fn car_door_closed() -> Event {
// END_ANCHOR: car_door_closed
Event::CarDoorClosed
}
// ANCHOR: lobby_call_button_pressed
/// A directional button was pressed in an elevator lobby on the given floor.
fn lobby_call_button_pressed(floor: i32, dir: Direction) -> Event {
// END_ANCHOR: lobby_call_button_pressed
Event::ButtonPressed(Button::LobbyCall(dir, floor))
}
// ANCHOR: car_floor_button_pressed
/// A floor button was pressed in the elevator car.
fn car_floor_button_pressed(floor: i32) -> Event {
// END_ANCHOR: car_floor_button_pressed
Event::ButtonPressed(Button::CarFloor(floor))
}
// ANCHOR: main
fn main() {
println!(
"A ground floor passenger has pressed the up button: {:?}",
lobby_call_button_pressed(0, Direction::Up)
);
println!(
"The car has arrived on the ground floor: {:?}",
car_arrived(0)
);
println!("The car door opened: {:?}", car_door_opened());
println!(
"A passenger has pressed the 3rd floor button: {:?}",
car_floor_button_pressed(3)
);
println!("The car door closed: {:?}", car_door_closed());
println!("The car has arrived on the 3rd floor: {:?}", car_arrived(3));
}
// ANCHOR_END: main