Move BufReader to caller

The original read_user_from_stream function from PR 1237 is a bad
pattern because it results in silently dropping any data left in the
buffer on return. If we want to read anything else from the same
TcpStream after the JSON object, the buffer needs to go in the caller.
This commit is contained in:
David Tolnay 2025-01-28 09:20:52 -08:00
parent 29122f9ed7
commit dc29e4815d
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82

View File

@ -2582,9 +2582,8 @@ where
/// location: String,
/// }
///
/// fn read_user_from_stream(tcp_stream: TcpStream) -> Result<User, Box<dyn Error>> {
/// let buf_tcp_stream = BufReader::new(tcp_stream);
/// let mut de = serde_json::Deserializer::from_reader(buf_tcp_stream);
/// fn read_user_from_stream(stream: &mut BufReader<TcpStream>) -> Result<User, Box<dyn Error>> {
/// let mut de = serde_json::Deserializer::from_reader(stream);
/// let u = User::deserialize(&mut de)?;
///
/// Ok(u)
@ -2595,8 +2594,9 @@ where
/// # fn fake_main() {
/// let listener = TcpListener::bind("127.0.0.1:4000").unwrap();
///
/// for stream in listener.incoming() {
/// println!("{:#?}", read_user_from_stream(stream.unwrap()));
/// for tcp_stream in listener.incoming() {
/// let mut buffered = BufReader::new(tcp_stream.unwrap());
/// println!("{:#?}", read_user_from_stream(&mut buffered));
/// }
/// }
/// ```