I feel like this should work across all integers, but I can't get it to compile...
use num::Integer;
struct EvenOddVec<T> {
even: Vec<T>,
odd: Vec<T>,
}
impl<T> From<Vec<T>> for EvenOddVec<T>
where
T: Integer,
{
fn from(input: Vec<T>) -> Self {
let new = Self {
even: Vec::new(),
odd: Vec::new(),
};
for i in input {
if (i % 2) == 0 {
new.even.push(i);
} else {
new.odd.push(i);
}
}
new
}
}
fn main() {
let a = EvenOddVec::from(vec![-2, -1, 0, 1, 2, 3, 4, 5]);
println!("{:?} - {:?}", a.even, a.odd);
}
Should compile but doesn't:
error[E0308]: mismatched types
--> src/main.rs:18:21
|
8 | impl<T> From<Vec<T>> for EvenOddVec<T>
| - expected this type parameter
...
18 | if (i % 2) == 0 {
| - ^ expected type parameter `T`, found integer
| |
| expected because this is `T`
|
= note: expected type parameter `T`
found type `{integer}`
error[E0308]: mismatched types
--> src/main.rs:18:27
|
8 | impl<T> From<Vec<T>> for EvenOddVec<T>
| - expected this type parameter
...
18 | if (i % 2) == 0 {
| ------- ^ expected type parameter `T`, found integer
| |
| expected because this is `T`
|
= note: expected type parameter `T`
found type `{integer}`
For more information about this error, try `rustc --explain E0308`.