From 6adcb5400b8403b36ca83ebf1801f0f3d0442d4f Mon Sep 17 00:00:00 2001 From: Karan Kadam Date: Sun, 25 Dec 2022 16:30:42 +1030 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20added=20solution=20for?= =?UTF-8?q?=20quiz3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exercises/quiz3.rs | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/exercises/quiz3.rs b/exercises/quiz3.rs index 15dc4699..94753e53 100644 --- a/exercises/quiz3.rs +++ b/exercises/quiz3.rs @@ -14,18 +14,38 @@ // Execute `rustlings hint quiz3` or use the `hint` watch subcommand for a hint. -// I AM NOT DONE +pub trait Grade { + fn to_string(&self) -> String; +} -pub struct ReportCard { - pub grade: f32, +pub struct StrGrade(String); +pub struct NumGrade(f32); + +impl Grade for StrGrade { + fn to_string(&self) -> String { + self.0.to_string() + } +} +impl Grade for NumGrade { + fn to_string(&self) -> String { + self.0.to_string() + } +} + +pub struct ReportCard { + pub grade: G, pub student_name: String, pub student_age: u8, } -impl ReportCard { +impl ReportCard { 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.to_string() + ) } } @@ -36,7 +56,7 @@ mod tests { #[test] fn generate_numeric_report_card() { let report_card = ReportCard { - grade: 2.1, + grade: NumGrade(2.1), student_name: "Tom Wriggle".to_string(), student_age: 12, }; @@ -50,7 +70,7 @@ mod tests { 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: StrGrade(String::from("A+")), student_name: "Gary Plotter".to_string(), student_age: 11, };