struct Student {
name: String,
grade: Option<u32>,
}
fn get_grade(
student_name: &String,
student_db: &Vec<Student>,
) -> Option<u32> {
for stu in student_db {
if stu.name == *student_name {
return stu.grade;
}
}
Option::None
}
fn check_student(
student_name: &String,
student_db: &Vec<Student>,
) -> Result<(), String> {
for item in student_db {
if (item.name == *student_name) {
return Ok(());
}
}
Err(format!(
"No students found with the student name {} in the student database",
student_name
)
.to_string())
}
fn check_student_get_grade(
student_name: &String,
student_db: &Vec<Student>,
) -> Result<Option<u32>, String> {
for item in student_db {
if (item.name == *student_name) {
return Ok(item.grade);
}
}
Err(format!(
"No students found with the student name {} in the student database",
student_name
)
.to_string())
}
fn main() {
let student_db = vec![
Student {
name: String::from("Alice"),
grade: Some(98),
},
Student {
name: "Bob".to_string(),
grade: Some(91),
},
Student {
name: "Mae".to_string(),
grade: Option::None,
},
];
let student_name = String::from("Bob");
let student_status =
check_student_get_grade(&student_name, &student_db);
match student_status {
Ok(options_grade) => {
if let Some(grade) = options_grade {
println!("Grade is {grade}");
}
}
Err(err_msg) => {
println!("{err_msg}");
}
}
let student_name = String::from("A");
let student_status =
check_student_get_grade(&student_name, &student_db);
match student_status {
Ok(options_grade) => {
if let Some(grade) = options_grade {
println!("Grade is {grade}");
}
}
Err(err_msg) => {
println!("{err_msg}");
}
}
}