- {
- let mut partial_kiss_out = self.partial_kiss_out.lock().unwrap();
- if let Some(partial) = partial_kiss_out.as_mut() {
- let remaining = partial.output.len() - partial.idx;
- let to_write = remaining.min(buf.len());
- buf[0..to_write]
- .copy_from_slice(&partial.output[partial.idx..(partial.idx + to_write)]);
- if to_write == remaining {
- *partial_kiss_out = None;
- } else {
- partial.idx += to_write;
- }
- return Ok(to_write);
- }
- }
- let output = {
- let rx = self.kiss_out_rx.lock().unwrap();
- rx.recv()
- .map_err(|s| io::Error::new(ErrorKind::Other, format!("{:?}", s)))?
- };
- let to_write = output.len().min(buf.len());
- buf[0..to_write].copy_from_slice(&output[0..to_write]);
- if to_write != output.len() {
- *self.partial_kiss_out.lock().unwrap() = Some(PartialKissOut {
- output,
- idx: to_write,
- })
- }
- Ok(to_write)