serde_valid/json/from_json_reader.rs
1pub trait FromJsonReader
2where
3 Self: Sized,
4{
5 /// Convert from json reader.
6 ///
7 /// ```should_panic
8 /// use std::fs::File;
9 /// use serde::Deserialize;
10 /// use serde_valid::Validate;
11 /// use serde_valid::json::FromJsonReader;
12 ///
13 /// #[derive(Debug, Validate, Deserialize)]
14 /// struct TestStruct {
15 /// #[validate(maximum = 2000)]
16 /// val: i32,
17 /// }
18 ///
19 /// let s = TestStruct::from_json_reader(File::open("foo.txt").unwrap());
20 ///
21 /// assert!(s.is_ok())
22 /// ```
23 fn from_json_reader<R>(reader: R) -> Result<Self, crate::Error<serde_json::Error>>
24 where
25 R: std::io::Read;
26}
27
28impl<T> FromJsonReader for T
29where
30 T: serde::de::DeserializeOwned + crate::Validate,
31{
32 fn from_json_reader<R>(reader: R) -> Result<Self, crate::Error<serde_json::Error>>
33 where
34 R: std::io::Read,
35 {
36 let model: T = serde_json::from_reader(reader)?;
37 model.validate().map_err(crate::Error::ValidationError)?;
38 Ok(model)
39 }
40}