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

随声附和 提交于 2019-12-01 15:16:04

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:

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!