Черта реализации io :: Read по новому типу - PullRequest
0 голосов
/ 07 сентября 2018

Я реализовал структуру внутри модуля. Я пытаюсь реализовать черту io :: Read для ссылочного фрагмента структуры.

Вот упрощенная версия моего кода. На данный момент реализация новой черты неэффективна. Я пробую разные вещи, чтобы это сработало.

struct mytype {
    inner: f32,
}
impl io::Read for mytype {
    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
        buf.write_u32::<LittleEndian>(self.inner.to_bits()).unwrap();
        Ok(4)
    }
}    
impl<'a> io::Read for &'a [mytype] {
    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
        let mut vec8: Vec<u8> = vec![];
        for t in self.iter() {
            match (*t).read_u32::<LittleEndian>() {
                Ok(u) => vec8.write_u32::<LittleEndian>(u).unwrap(),
                Err(x) => (),
            }
        }
        for (ind, it) in vec8.iter().enumerate() {
            buf[ind] = *it;
        }
        Ok(vec8.len())
    }
}

Компилятор ржавчины продолжает жаловаться на код с этой ошибкой:

error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
  --> src\lib.rs:37:1
   |
37 | impl<'a> io::Read for &'a [mytype] {
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
   |
   = note: the impl does not reference any types defined in this crate
   = note: define and implement a trait or new type instead

Просто реализация io :: Read for mytype работает правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...