diff --git a/src/lib.rs b/src/lib.rs index d2cfb7ca8..5dad12479 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -247,7 +247,9 @@ impl Spidev { /// Chaining together multiple requests like this can reduce latency /// and be used for conveniently and efficient implementing some /// protocols without extra round trips back to userspace. - pub fn transfer_multiple(&self, transfers: &Vec) -> io::Result<()> { + pub fn transfer_multiple<'a, I>(&self, transfers: I) -> io::Result<()> + where I: IntoIterator + { spidevioctl::transfer_multiple(self.devfile.as_raw_fd(), transfers) } } diff --git a/src/spidevioctl.rs b/src/spidevioctl.rs index c4909c7f2..7302a4d6a 100644 --- a/src/spidevioctl.rs +++ b/src/spidevioctl.rs @@ -240,9 +240,11 @@ pub fn transfer(fd: RawFd, transfer: &mut SpidevTransfer) -> io::Result<()> { Ok(()) } -pub fn transfer_multiple(fd: RawFd, transfers: &Vec) -> io::Result<()> { +pub fn transfer_multiple<'a, I>(fd: RawFd, transfers: I) -> io::Result<()> + where I: IntoIterator +{ // create a boxed slice containing several spi_ioc_transfers - let mut raw_transfers = transfers.iter() + let mut raw_transfers = transfers.into_iter() .map(|transfer| transfer.as_spi_ioc_transfer()) .collect::>() .into_boxed_slice();