99// Execute `rustlings hint iterators3` or use the `hint` watch subcommand for a
1010// hint.
1111
12- // I AM NOT DONE
13-
1412#[ derive( Debug , PartialEq , Eq ) ]
1513pub enum DivisionError {
1614 NotDivisible ( NotDivisibleError ) ,
@@ -26,23 +24,47 @@ pub struct NotDivisibleError {
2624// Calculate `a` divided by `b` if `a` is evenly divisible by `b`.
2725// Otherwise, return a suitable error.
2826pub fn divide ( a : i32 , b : i32 ) -> Result < i32 , DivisionError > {
29- todo ! ( ) ;
27+ if b == 0 {
28+ Err ( DivisionError :: DivideByZero )
29+ } else if a % b == 0 {
30+ Ok ( a / b)
31+ } else {
32+ Err ( DivisionError :: NotDivisible ( NotDivisibleError { dividend : a, divisor : b } ) )
33+ }
3034}
3135
3236// Complete the function and return a value of the correct type so the test
3337// passes.
3438// Desired output: Ok([1, 11, 1426, 3])
35- fn result_with_list ( ) -> ( ) {
39+ fn result_with_list ( ) -> Result < Vec < i32 > , DivisionError > {
3640 let numbers = vec ! [ 27 , 297 , 38502 , 81 ] ;
37- let division_results = numbers. into_iter ( ) . map ( |n| divide ( n, 27 ) ) ;
41+
42+ numbers. into_iter ( ) . map ( |n| divide ( n, 27 ) ) . collect ( )
43+ // let division_results = numbers.into_iter().map(|n| divide(n, 27));
44+
45+
46+ // let mut result = vec![];
47+
48+ // for v in division_results {
49+ // match v {
50+ // Ok(number) => {
51+ // result.push(number);
52+ // }
53+ // Err(e) => {
54+ // return Err(e)
55+ // }
56+ // }
57+ // }
58+
59+ // Ok(result)
3860}
3961
4062// Complete the function and return a value of the correct type so the test
4163// passes.
4264// Desired output: [Ok(1), Ok(11), Ok(1426), Ok(3)]
43- fn list_of_results ( ) -> ( ) {
65+ fn list_of_results ( ) -> Vec < Result < i32 , DivisionError > > {
4466 let numbers = vec ! [ 27 , 297 , 38502 , 81 ] ;
45- let division_results = numbers. into_iter ( ) . map ( |n| divide ( n, 27 ) ) ;
67+ numbers. into_iter ( ) . map ( |n| divide ( n, 27 ) ) . collect ( )
4668}
4769
4870#[ cfg( test) ]
0 commit comments