Почему при повторном заимствовании & mut [u8] размер неизвестен во время компиляции? - PullRequest
0 голосов
/ 30 мая 2020

Я создаю изменяемый буфер [u8] следующим образом:

let buffer: &mut [u8] = &mut [0u8; 34];

и использую здесь:

repr.emit(&mut *buffer, &caps.checksum);

и заимствую здесь:

assert_eq!(processor!(iface).process_ip_payload(&mut ip, &mut socket_set, Instant::from_millis(0), &mut *buffer), Ok(Some(expected_repr)));

Я получаю:

размер значений типа [u8] не может быть известен во время компиляции

не имеет размера, известного во время компиляции

для ...,&mut *buffer) повторного заимствования (последнего, при assert).

Размер исходного буфера известен во время компиляции. Почему при повторном заимствовании размер неизвестен?

Вот подписи, если нужно:

    pub fn emit<T: AsRef<[u8]> + AsMut<[u8]>>(
        &self,
        buffer: T,
        _checksum_caps: &ChecksumCapabilities,
    )
    fn process_ip_payload<'frame, T: AsRef<[u8]>>(
        &mut self,
        ip: &mut ip::Processor,
        sockets: &mut SocketSet,
        timestamp: Instant,
        frame: &'frame T,
    ) -> Result<Option<ip::Packet<'frame>>>

1 Ответ

1 голос
/ 30 мая 2020

Не разыменовывать buffer при передаче его в качестве аргумента:

assert_eq!(processor!(iface).process_ip_payload(
    &mut ip, &mut socket_set, Instant::from_millis(0), &mut buffer),
    Ok(Some(expected_repr)));

(&mut buffer вместо &mut *buffer).

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