pub trait TransmuteExt<U>: Sized {
type IntoIter: Iterator<Item = U>;
fn transmute_iter(self) -> Self::IntoIter;
}
impl<T, U, I> TransmuteExt<U> for I
where
I: IntoIterator<Item = T>,
U: From<T>,
{
type IntoIter = std::iter::Map<<I as IntoIterator>::IntoIter, fn(T) -> U>;
#[inline]
fn transmute_iter(self) -> Self::IntoIter {
self.into_iter().map(U::from)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_transumute_i32_to_f64() {
let v = vec![1, 2, 3];
let result: Vec<f64> = v.transmute_iter().collect();
assert_eq!(result, vec![1.0, 2.0, 3.0])
}
}