In the previous challenge we converted a Result<T, E>
to an Option<T>
by using the .ok()
method, Rust provides us other mechanisms to convert an Option<T>
to a Result<T, E>
as well. In this challenge, you will learn how to use the .ok_or()
method to convert an Option<T>
to a Result<T, E>
.
Implement the function get_first_element
:
Vec<i32>
).i32
)..first()
method to retrieve the first element of the vector, this returns Option<&T>
.None
, convert it to a Result<T, E>
using the .ok_or()
method with the error message "Vector is empty"
."First element is below the minimum allowed value"
.Ok(T)
with the first element.If you're stuck, here are some hints to help you solve the challenge:
.ok_or()
method and propagate the error cleanly. e.g.
let first_element = numbers.first().ok_or("Vector is empty".to_string())?;
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string())?; // <- Returns an Option<&i32> if min_value > *first_element { return Err("First element is below the minimum allowed value".to_string()); } Ok(*first_element)}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty")?; // <- Returns an Option<&i32> if first_element < &min_value { return Err("First element is below the minimum allowed value".to_string()) } Ok(*first_element)}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let &first_element = numbers.first().ok_or("Vector is empty".to_string())?; if first_element < min_value { return Err("First element is below the minimum allowed value".to_string()); } Ok(first_element)}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty")?; if first_element >= &min_value { Ok(*first_element) } else { Err("First element is below the minimum allowed value".to_string()) }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first = numbers.first().ok_or("Vector is empty".to_string())?; if *first < min_value{ return Err("First element is below the minimum allowed value".to_string()); } return Ok(*first);}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string())?; if *first_element >= min_value { return Ok(*first_element) } Err("First element is below the minimum allowed value".to_string())}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty")?; // <- Returns an Option<&i32> if first_element < &min_value { return Err("First element is below the minimum allowed value".to_string()) } Ok(*first_element)}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty")?; // <- Returns an Option<&i32> if *first_element < min_value { return Err("First element is below the minimum allowed value".to_string()); } Ok(*first_element)}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let &first_element = numbers.first().ok_or(String::from("Vector is empty"))?; if first_element < min_value { return Err(String::from( "First element is below the minimum allowed value", )); } Ok(first_element)}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first() .ok_or("Vector is empty".to_string())?; if *first_element >= min_value { Ok(*first_element) } else { Err(String::from("First element is below the minimum allowed value")) }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string())?; // <- Returns an Option<&i32> if *first_element < min_value { return Err("First element is below the minimum allowed value".to_string()) } Ok(*first_element)}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let &first_element = numbers.first().ok_or(String::from("Vector is empty"))?; if first_element >= min_value { return Ok(first_element); } Err(String::from("First element is below the minimum allowed value"))}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string())?; // <- Returns an Option<&i32> if first_element < &min_value { return Err("First element is below the minimum allowed value".to_string()); } Ok(*first_element)}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string())?; // <- Returns an Option<&i32> if *first_element < min_value { return Err("First element is below the minimum allowed value".to_string()); } Ok(*first_element)}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = *numbers .first() .ok_or("Vector is empty".to_string())?; if first_element >= min_value { Ok(first_element) } else { Err("First element is below the minimum allowed value".to_string()) }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().cloned().ok_or("Vector is empty")?; // <- Returns an Option<&i32> if first_element < min_value { Err("First element is below the minimum allowed value".to_string()) } else { Ok(first_element) }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { let first_element = numbers.first().ok_or("Vector is empty".to_string())?; if *first_element >= min_value { Ok(*first_element) } else { Err("First element is below the minimum allowed value".to_string()) }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string()); match first_element { Ok(num) => { if *num < min_value { Err("First element is below the minimum allowed value".to_string()) } else { Ok(*num) } }, Err(msg) => Err(msg), }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string()); match first_element { Ok(first_element) => { if *first_element >= min_value { return Ok(*first_element); } else { return Err("First element is below the minimum allowed value".to_string()) } }, Err(err) => return Err(err) }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string()); match first_element { Ok(first_element) => { if *first_element >= min_value { return Ok(*first_element); } else { return Err("First element is below the minimum allowed value".to_string()) } }, Err(err) => return Err(err) }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty")?; // <- Returns an Option<&i32> if *first_element >= min_value { Ok(*first_element) } else { Err("First element is below the minimum allowed value".to_string()) }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string())?; // <- Returns an Option<&i32> if *first_element < min_value { Err("First element is below the minimum allowed value".to_string()) }else{ Ok(*first_element) }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first(); // <- Returns an Option<&i32> match first_element { Some(num) => if *num < min_value { Err("First element is below the minimum allowed value".to_string()) } else { Ok(*num) } , None => first_element.copied().ok_or("Vector is empty".to_string()) }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first(); // <- Returns an Option<&i32 if first_element.is_none() { return first_element.copied().ok_or("Vector is empty".to_string()); } let v = first_element.copied().unwrap(); if v < min_value { return Err("First element is below the minimum allowed value".to_string()); } Ok(v)}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { numbers .first() .map(|n| n.to_owned()) .ok_or("Vector is empty".to_string()) .and_then(|num| { if num >= min_value { Ok(num) } else { Err("First element is below the minimum allowed value".to_string()) } })}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { let first_element = numbers.first(); first_element .map(|n| n.to_owned()) .ok_or("Vector is empty".to_string()) .and_then(|num| { if num >= min_value { Ok(num) } else { Err("First element is below the minimum allowed value".to_string()) } })}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first(); // <- Returns an Option<&i32> let result = first_element .map(|n| n.to_owned()) .ok_or("Vector is empty".to_string()); match result { Ok(n) => { if n < min_value { Err("First element is below the minimum allowed value".to_string()) } else { Ok(n) } } Err(e) => Err(e), }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty")?; // <- Returns an Option<&i32> if *first_element < min_value { Err("First element is below the minimum allowed value".to_string()) } else { Ok(*first_element) }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or(String::from("Vector is empty"))?; // <- Returns an Option<&i32> if *first_element < min_value { Err(String::from("First element is below the minimum allowed value")) } else { Ok(*first_element) }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string())?; // <- Returns an Option<&i32> if *first_element >= min_value { Ok(*first_element) } else { Err("First element is below the minimum allowed value".to_string()) }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string()); // <- Returns an Option<&i32> match first_element { Err(message) => Err(message), Ok(number) => { if number < &min_value { Err("First element is below the minimum allowed value".to_string()) } else { Ok(*number) } } }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string()); // <- Returns an Option<&i32> match first_element { Ok(n) => { if n < &min_value { Err("First element is below the minimum allowed value".to_string()) } else { Ok(*n) } } Err(m) => Err(m), }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string()); // <- Returns an Option<&i32> match first_element { Err(message) => Err(message), Ok(number) => { if number < &min_value { Err("First element is below the minimum allowed value".to_string()) } else { Ok(*number) } } }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string()); // <- Returns an Option<&i32> match first_element { Err(message) => Err(message), Ok(number) => { if number < &min_value{ Err("First element is below the minimum allowed value".to_string()) } else{ Ok(*number) } } }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string())?; if *first_element < min_value { return Err(String::from("First element is below the minimum allowed value")); } Ok(*first_element)}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { numbers .first() .ok_or("Vector is empty".to_string()) .and_then(|&num| if num>=min_value { Ok(num) }else{ Err("First element is below the minimum allowed value".to_string()) } )}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string()).copied()?; if first_element < min_value { Err("First element is below the minimum allowed value".to_string()) } else { Ok(first_element) }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { match numbers.first().copied() { Some(n) if n >= min_value => Ok(n), Some(_) => Err("First element is below the minimum allowed value".to_string()), None => Err("Vector is empty".to_string()) }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string()); // <- Returns an Option<&i32> let result = first_element.copied().and_then(|num| { if num >= min_value { Ok(num) } else { Err("First element is below the minimum allowed value".to_string()) } }); result}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first(); // <- Returns an Option<&i32> first_element .ok_or("Vector is empty".to_string()) .and_then(|&value| { if value < min_value { Err("First element is below the minimum allowed value".to_string()) } else { Ok(value) } })}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string())?.clone(); if first_element >= min_value { Ok(first_element) } else { Err("First element is below the minimum allowed value".to_string()) }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first(); // <- Returns an Option<&i32> match first_element { None => { return first_element.ok_or("Vector is empty".to_string()).copied(); }, Some(&val) => { if val < min_value { return Err("First element is below the minimum allowed value".to_string()); } else { return Ok(val); } } }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string()); // <- Returns an Option<&i32> match first_element { Err(msg) => Err(msg), Ok(number) => { if *number >= min_value { return Ok(*number); } else { return Err("First element is below the minimum allowed value".to_string()); } } }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { let first_element = numbers.first(); match first_element { Some(num) => if *num >= min_value { Ok(*num) } else { Err("First element is below the minimum allowed value".to_string()) } None => first_element.ok_or("Vector is empty".to_string()).copied() }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first(); // <- Returns an Option<&i32> let result = first_element.ok_or("Vector is empty".to_string()).copied()?; if first_element.ok_or("Vector is empty".to_string()).copied()? < min_value { return Err("First element is below the minimum allowed value".to_string()); } Ok(result)}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = *numbers.first().ok_or("Vector is empty".to_string())?; // <- Returns an Option<&i32> if first_element >= min_value { Ok(first_element) } else { Err("First element is below the minimum allowed value".to_string()) }}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { let first_element = numbers.first(); let result = first_element .ok_or("Vector is empty".to_string()) .copied()?; if result < min_value { return Err("First element is below the minimum allowed value".to_string()); } Ok(result)}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { let first_element = numbers.first(); let result = first_element .ok_or("Vector is empty".to_string()) .copied()?; if first_element .ok_or("Vector is empty".to_string()) .copied()? < min_value { return Err("First element is below the minimum allowed value".to_string()); } Ok(result)}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string())?; // <- Returns an Option<&i32> if *first_element < min_value { return Err("First element is below the minimum allowed value".to_string()) } Ok(*first_element)}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}
pub fn get_first_element(numbers: Vec<i32>, min_value: i32) -> Result<i32, String> { // Finish the function let first_element = numbers.first().ok_or("Vector is empty".to_string())?; // <- Returns an Option<&i32> if *first_element < min_value { return Err("First element is below the minimum allowed value".to_string()); } Ok(*first_element)}// Example usagepub fn main() { let numbers = vec![10, 20, 30, 40, 50]; match get_first_element(numbers.clone(), 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), } let empty_numbers: Vec<i32> = vec![]; match get_first_element(empty_numbers, 15) { Ok(value) => println!("First valid value: {}", value), Err(e) => println!("Error: {}", e), }}