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}