Why does serde_json::from_reader take ownership of the reader? Why does serde_json::from_reader take ownership of the reader? json json

Why does serde_json::from_reader take ownership of the reader?


Because it's an API guideline:

Generic reader/writer functions take R: Read and W: Write by value (C-RW-VALUE)

The standard library contains these two impls:

impl<'a, R: Read + ?Sized> Read for &'a mut R { /* ... */ }impl<'a, W: Write + ?Sized> Write for &'a mut W { /* ... */ }

That means any function that accepts R: Read or W: Write generic parameters by value can be called with a mut reference if necessary.

You either call Read::by_ref or just take a reference yourself:

serde_json::from_reader(&mut request.body)
serde_json::from_reader(request.body.by_ref())

See also: