From dc29e4815d8b99d48f43d73638819b25e7cd19c8 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Tue, 28 Jan 2025 09:20:52 -0800 Subject: [PATCH] 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. --- src/de.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/de.rs b/src/de.rs index db4b6dd..3448045 100644 --- a/src/de.rs +++ b/src/de.rs @@ -2582,9 +2582,8 @@ where /// location: String, /// } /// -/// fn read_user_from_stream(tcp_stream: TcpStream) -> Result> { -/// 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) -> Result> { +/// 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)); /// } /// } /// ```