File tree 1 file changed +18
-1
lines changed
1 file changed +18
-1
lines changed Original file line number Diff line number Diff line change @@ -14,6 +14,23 @@ use serde_json;
14
14
15
15
pub use serde_json:: error:: Error as SerdeError ;
16
16
17
+ /// Like [`from_reader`] but eagerly reads the content of the reader to a string
18
+ /// and delegates to `from_str`.
19
+ ///
20
+ /// [`from_reader`]: https://docs.serde.rs/serde_json/fn.from_reader.html
21
+ fn from_reader_eager < R , T > ( mut reader : R ) -> serde_json:: Result < T >
22
+ where
23
+ R : Read ,
24
+ T : DeserializeOwned ,
25
+ {
26
+ let mut s = String :: new ( ) ;
27
+ if let Err ( io_err) = reader. read_to_string ( & mut s) {
28
+ // Error::io is private to serde_json. Do not use.
29
+ return Err ( SerdeError :: io ( io_err) ) ;
30
+ }
31
+ serde_json:: from_str ( & s)
32
+ }
33
+
17
34
/// The JSON type: implements `FromData` and `Responder`, allowing you to easily
18
35
/// consume and respond with JSON.
19
36
///
@@ -97,7 +114,7 @@ impl<T: DeserializeOwned> FromData for Json<T> {
97
114
}
98
115
99
116
let size_limit = request. limits ( ) . get ( "json" ) . unwrap_or ( LIMIT ) ;
100
- serde_json :: from_reader ( data. open ( ) . take ( size_limit) )
117
+ from_reader_eager ( data. open ( ) . take ( size_limit) )
101
118
. map ( |val| Json ( val) )
102
119
. map_err ( |e| { error_ ! ( "Couldn't parse JSON body: {:?}" , e) ; e } )
103
120
. into_outcome ( Status :: BadRequest )
You can’t perform that action at this time.
0 commit comments