//@ run-pass | |
trait DigitCollection: Sized { | |
type Iter: Iterator<Item = u8>; | |
fn digit_iter(self) -> Self::Iter; | |
fn digit_sum(self) -> u32 { | |
self.digit_iter() | |
.map(|digit: u8| digit as u32) | |
.fold(0, |sum, digit| sum + digit) | |
} | |
} | |
impl<I> DigitCollection for I where I: Iterator<Item=u8> { | |
type Iter = I; | |
fn digit_iter(self) -> I { | |
self | |
} | |
} | |
fn main() { | |
let xs = vec![1, 2, 3, 4, 5]; | |
assert_eq!(xs.into_iter().digit_sum(), 15); | |
} |