use std::result;
pub fn enter(){
let temp = TempStruct::new(vec![0x100,0xff,0xfff,0xffff,0xfffff]);
for iter in temp.iter() {
println!("elem:{}",iter);
}
return;
let temp:Vec<i32> = Vec::new();
let v1 = vec![1,2,3];
for val in v1.iter(){
println!("got:{}",val);
}
}
struct TempStruct{
arr:Vec<i32>,
}
impl TempStruct {
pub fn new(arr_:Vec<i32>)->Self{
let result = Self{
arr:arr_
};
return result;
}
pub fn iter(&self)->TempStructIter{
return TempStructIter::new(self.arr.to_vec());
}
}
struct TempStructIter{
_arr:Vec<i32>,
_curr:usize,
_first:bool,
_is_over_len:bool,
}
impl TempStructIter{
fn new(arr_:Vec<i32>)->Self{
return TempStructIter{
_arr:arr_,
_curr:0,
_first:true,
_is_over_len:false
};
}
fn reset(&mut self){
self._curr = 0;
}
}
impl Iterator for TempStructIter{
type Item = i32;
fn next(&mut self) -> Option<Self::Item> {
if self._is_over_len{
return None;
}
if self._first{
self._first = false;
return Option::Some(self._arr[0]);
}
self._curr += 1;
if self._curr < self._arr.len(){
return Option::Some(self._arr[self._curr]);
}
else {
self._is_over_len = true;
return Option::None;
}
}
}
#[derive(PartialEq,Debug)]
struct Shoe{
_size:u32,
_style:String,
}
fn shoes_in_size(shoes_:Vec<Shoe>,shoe_size_:u32)->Vec<Shoe>{
return shoes_.into_iter().filter(|s| s._size == shoe_size_).collect();
}
#[test]
fn filters_by_size(){
let shoes = vec![
Shoe { _size: 10, _style:String::from("sneaker")},
Shoe { _size: 13, _style:String::from("sandal")},
Shoe { _size: 10, _style:String::from("boot")},
];
let in_my_size = shoes_in_size(shoes, 10 );
assert_eq!
(
in_my_size,
vec!
[
Shoe { _size: 10, _style:String::from("sneaker")},
Shoe { _size: 10, _style:String::from("boot")},
]
);
}