File: seq_iter.rs

package info (click to toggle)
rust-openssh-sftp-protocol 0.24.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 172 kB
  • sloc: makefile: 2
file content (25 lines) | stat: -rw-r--r-- 601 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#![forbid(unsafe_code)]

use std::marker::PhantomData;

use serde::{
    de::{Error, SeqAccess},
    Deserialize,
};

pub(crate) struct SeqIter<'de, V: SeqAccess<'de>>(usize, V, PhantomData<&'de ()>);

impl<'de, V: SeqAccess<'de>> SeqIter<'de, V> {
    pub(crate) fn new(seq: V) -> Self {
        Self(0, seq, PhantomData)
    }

    pub(crate) fn get_next<T: Deserialize<'de>>(&mut self) -> Result<T, V::Error> {
        let res = self
            .1
            .next_element()?
            .ok_or_else(|| Error::invalid_length(self.0, &"Not long enough"));
        self.0 += 1;
        res
    }
}