From 50c322d8c93a63bcf1a570fcb07dc6a1cf1bd07c Mon Sep 17 00:00:00 2001 From: David Bailey <davidbailey00@outlook.com> Date: Sat, 16 Jan 2021 20:43:05 +0000 Subject: [PATCH] Add generics solutions --- exercises/generics/generics1.rs | 4 +--- exercises/generics/generics2.rs | 10 ++++------ exercises/generics/generics3.rs | 20 +++++++++++--------- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/exercises/generics/generics1.rs b/exercises/generics/generics1.rs index 967287e..07a3ed8 100644 --- a/exercises/generics/generics1.rs +++ b/exercises/generics/generics1.rs @@ -1,9 +1,7 @@ // This shopping list program isn't compiling! // Use your knowledge of generics to fix it. -// I AM NOT DONE - fn main() { - let mut shopping_list: Vec<?> = Vec::new(); + let mut shopping_list: Vec<&str> = Vec::new(); shopping_list.push("milk"); } diff --git a/exercises/generics/generics2.rs b/exercises/generics/generics2.rs index 0cb59ad..57ae948 100644 --- a/exercises/generics/generics2.rs +++ b/exercises/generics/generics2.rs @@ -1,14 +1,12 @@ // This powerful wrapper provides the ability to store a positive integer value. // Rewrite it using generics so that it supports wrapping ANY type. -// I AM NOT DONE - -struct Wrapper { - value: u32, +struct Wrapper<T> { + value: T, } -impl Wrapper { - pub fn new(value: u32) -> Self { +impl<T> Wrapper<T> { + pub fn new(value: T) -> Self { Wrapper { value } } } diff --git a/exercises/generics/generics3.rs b/exercises/generics/generics3.rs index 64dd9bc..7eb276f 100644 --- a/exercises/generics/generics3.rs +++ b/exercises/generics/generics3.rs @@ -10,18 +10,21 @@ // Execute 'rustlings hint generics3' for hints! -// I AM NOT DONE - -pub struct ReportCard { - pub grade: f32, +pub struct ReportCard<T> +where + T: std::fmt::Display, +{ + pub grade: T, pub student_name: String, pub student_age: u8, } -impl ReportCard { +impl<T: std::fmt::Display> ReportCard<T> { pub fn print(&self) -> String { - format!("{} ({}) - achieved a grade of {}", - &self.student_name, &self.student_age, &self.grade) + format!( + "{} ({}) - achieved a grade of {}", + &self.student_name, &self.student_age, &self.grade + ) } } @@ -44,9 +47,8 @@ mod tests { #[test] fn generate_alphabetic_report_card() { - // TODO: Make sure to change the grade here after you finish the exercise. let report_card = ReportCard { - grade: 2.1, + grade: "A+", student_name: "Gary Plotter".to_string(), student_age: 11, };