Factor out common stream read code

This commit is contained in:
Benjamin Saunders
2019-01-15 20:54:11 -08:00
committed by Dirkjan Ochtman
parent 04c167942e
commit e4c51baf64
+16 -23
View File
@@ -171,18 +171,7 @@ impl Recv {
self.bytes_read += n as u64;
Ok(n)
} else {
match self.state {
RecvState::ResetRecvd { error_code, .. } => {
self.state = RecvState::Closed;
Err(ReadError::Reset { error_code })
}
RecvState::Closed => unreachable!(),
RecvState::Recv { .. } => Err(ReadError::Blocked),
RecvState::DataRecvd { .. } => {
self.state = RecvState::Closed;
Err(ReadError::Finished)
}
}
Err(self.read_blocked())
}
}
@@ -195,17 +184,21 @@ impl Recv {
self.bytes_read += x.0.len() as u64;
Ok(x)
} else {
match self.state {
RecvState::ResetRecvd { error_code, .. } => {
self.state = RecvState::Closed;
Err(ReadError::Reset { error_code })
}
RecvState::Closed => unreachable!(),
RecvState::Recv { .. } => Err(ReadError::Blocked),
RecvState::DataRecvd { .. } => {
self.state = RecvState::Closed;
Err(ReadError::Finished)
}
Err(self.read_blocked())
}
}
fn read_blocked(&mut self) -> ReadError {
match self.state {
RecvState::ResetRecvd { error_code, .. } => {
self.state = RecvState::Closed;
ReadError::Reset { error_code }
}
RecvState::Closed => panic!("tried to read from a closed stream"),
RecvState::Recv { .. } => ReadError::Blocked,
RecvState::DataRecvd { .. } => {
self.state = RecvState::Closed;
ReadError::Finished
}
}
}