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

Adjust morning-session timings downward (#1786)

Based on feedback from @marshallpierce that mornings took about 2.5
hours, this adjusts a bunch of the morning times downward to try to
match that. In other words, this is trying to make the times in the
course more accurate, rather than reducing the amount of time available
for these slides.

This also updates the `course-schedule` tool to be able to show
per-segment timings.
This commit is contained in:
Dustin J. Mitchell 2024-02-06 15:48:56 -05:00 committed by GitHub
parent e921d4bb1e
commit 9f67c9b0e7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
24 changed files with 71 additions and 47 deletions

View File

@ -12,21 +12,29 @@
// See the License for the specific language governing permissions and
// limitations under the License.
use clap::Command;
use mdbook::MDBook;
use mdbook_course::course::{Course, Courses};
use mdbook_course::course::Courses;
use mdbook_course::markdown::duration;
fn main() {
pretty_env_logger::init();
let app = Command::new("mdbook-course")
.about("mdbook preprocessor for Comprehensive Rust")
.subcommand(Command::new("sessions").about("Show session summary (default)"))
.subcommand(Command::new("segments").about("Show segment summary"))
.subcommand(Command::new("pr").about("Show summary for a PR"));
let matches = app.get_matches();
let root_dir = ".";
let mdbook = MDBook::load(root_dir).expect("Unable to load the book");
let (courses, _) = Courses::extract_structure(mdbook.book)
.expect("Unable to extract course structure");
println!("## Course Schedule");
println!("With this pull request applied, the course schedule is as follows:");
for course in &courses {
print_summary(course);
match matches.subcommand() {
Some(("session", _)) | None => session_summary(&courses),
Some(("pr", _)) => pr_summary(&courses),
_ => unreachable!(),
}
}
@ -44,18 +52,42 @@ fn timediff(actual: u64, target: u64, slop: u64) -> String {
}
}
fn print_summary(course: &Course) {
if course.target_minutes() == 0 {
return;
}
println!("### {}", course.name);
println!("_{}_", timediff(course.minutes(), course.target_minutes(), 15));
for session in course {
println!(
"* {} - _{}_",
session.name,
timediff(session.minutes(), session.target_minutes(), 5)
);
fn session_summary(courses: &Courses) {
for course in courses {
if course.target_minutes() == 0 {
return;
}
for session in course {
println!("### {} // {}", course.name, session.name);
println!(
"_{}_",
timediff(session.minutes(), session.target_minutes(), 15)
);
println!();
for segment in session {
println!("* {} - _{}_", segment.name, duration(segment.minutes()));
}
println!();
}
}
}
fn pr_summary(courses: &Courses) {
println!("## Course Schedule");
println!("With this pull request applied, the course schedule is as follows:");
for course in courses {
if course.target_minutes() == 0 {
return;
}
println!("### {}", course.name);
println!("_{}_", timediff(course.minutes(), course.target_minutes(), 15));
for session in course {
println!(
"* {} - _{}_",
session.name,
timediff(session.minutes(), session.target_minutes(), 5)
);
}
}
}

View File

@ -1,5 +1,5 @@
---
minutes: 10
minutes: 5
---
# Blocks and Scopes

View File

@ -1,5 +1,5 @@
---
minutes: 5
minutes: 4
---
# `break` and `continue`

View File

@ -1,5 +1,5 @@
---
minutes: 5
minutes: 4
---
# Conditionals

View File

@ -1,5 +1,5 @@
---
minutes: 15
minutes: 10
---
# Generic Data Types

View File

@ -1,5 +1,5 @@
---
minutes: 10
minutes: 8
---
# Trait Bounds

View File

@ -2,10 +2,6 @@
minutes: 5
---
<!-- NOTES:
The Iterator trait and basic usage
-->
# `Iterator`
The [`Iterator`][1] trait supports iterating over values in a collection. It

View File

@ -2,10 +2,6 @@
minutes: 5
---
<!-- NOTES:
Present Copy as added functionality on top of the default move semantics: with Copy, the old value does not become invalid; Can derive Copy for a type if it implements Clone
-->
# Copy Types
While move semantics are the default, certain types are copied by default:

View File

@ -1,5 +1,5 @@
---
minutes: 10
minutes: 8
---
# The `Drop` Trait

View File

@ -1,5 +1,5 @@
---
minutes: 10
minutes: 5
---
# Move Semantics

View File

@ -1,5 +1,5 @@
---
minutes: 5
minutes: 3
---
# Deriving

View File

@ -1,5 +1,5 @@
---
minutes: 10
minutes: 8
---
# Methods

View File

@ -1,5 +1,5 @@
---
minutes: 10
minutes: 8
---
# Traits

View File

@ -1,5 +1,5 @@
---
minutes: 5
minutes: 3
---
# Modules

View File

@ -1,5 +1,5 @@
---
minutes: 10
minutes: 8
---
# use, super, self

View File

@ -1,5 +1,5 @@
---
minutes: 10
minutes: 8
---
# Destructuring

View File

@ -1,5 +1,5 @@
---
minutes: 10
minutes: 8
---
# `Box<T>`

View File

@ -1,5 +1,5 @@
---
minutes: 5
minutes: 3
---
# Compiler Lints and Clippy

View File

@ -1,5 +1,5 @@
---
minutes: 10
minutes: 5
---
# Other Types of Tests

View File

@ -23,7 +23,7 @@ fn first_word(text: &str) -> &str {
}
#[cfg(test)]
mod test {
mod tests {
use super::*;
#[test]

View File

@ -1,5 +1,5 @@
---
minutes: 5
minutes: 3
---
# Arithmetic

View File

@ -1,5 +1,5 @@
---
minutes: 5
minutes: 3
---
# Type Inference

View File

@ -1,5 +1,5 @@
---
minutes: 10
minutes: 5
---
# Strings

View File

@ -1,5 +1,5 @@
---
minutes: 10
minutes: 5
---
# Values