serde_valid/features/toml/
to_toml_writer.rs

1use serde::ser::Error;
2
3use super::ToTomlString;
4
5pub trait ToTomlWriter {
6    /// Convert to toml writer.
7    ///
8    /// ```should_panic
9    /// use std::fs::File;
10    /// use serde::Serialize;
11    /// use serde_valid::toml::ToTomlWriter;
12    /// use serde_valid::Validate;
13    ///
14    /// #[derive(Debug, Validate, Serialize)]
15    /// struct TestStruct {
16    ///     #[validate(maximum = 100)]
17    ///     val: i32,
18    /// }
19    /// let s = TestStruct { val: 10 };
20    ///
21    /// assert!(s.to_toml_writer(File::open("foo.txt").unwrap()).is_ok());
22    /// ```
23    fn to_toml_writer<W>(&self, writer: W) -> Result<(), serde_toml::ser::Error>
24    where
25        W: std::io::Write;
26
27    /// Convert to pretty toml writer.
28    ///
29    /// ```should_panic
30    /// use std::fs::File;
31    /// use serde::Serialize;
32    /// use serde_valid::toml::ToTomlWriter;
33    /// use serde_valid::Validate;
34    ///
35    /// #[derive(Debug, Validate, Serialize)]
36    /// struct TestStruct {
37    ///     #[validate(maximum = 100)]
38    ///     val: i32,
39    /// }
40    /// let s = TestStruct { val: 10 };
41    ///
42    /// assert!(s.to_toml_writer_pretty(File::open("foo.txt").unwrap()).is_ok());
43    /// ```
44    fn to_toml_writer_pretty<W>(&self, writer: W) -> Result<(), serde_toml::ser::Error>
45    where
46        W: std::io::Write;
47}
48
49impl<T> ToTomlWriter for T
50where
51    T: serde::Serialize + crate::Validate,
52{
53    fn to_toml_writer<W>(&self, writer: W) -> Result<(), serde_toml::ser::Error>
54    where
55        W: std::io::Write,
56    {
57        let mut writer = writer;
58        match writer.write_all(&self.to_toml_string()?.into_bytes()) {
59            Ok(_) => Ok(()),
60            Err(err) => Err(serde_toml::ser::Error::custom(err.to_string())),
61        }
62    }
63
64    fn to_toml_writer_pretty<W>(&self, writer: W) -> Result<(), serde_toml::ser::Error>
65    where
66        W: std::io::Write,
67    {
68        let mut writer = writer;
69        match writer.write_all(&self.to_toml_string_pretty()?.into_bytes()) {
70            Ok(_) => Ok(()),
71            Err(err) => Err(serde_toml::ser::Error::custom(err.to_string())),
72        }
73    }
74}
75
76impl ToTomlWriter for serde_toml::Value {
77    fn to_toml_writer<W>(&self, writer: W) -> Result<(), serde_toml::ser::Error>
78    where
79        W: std::io::Write,
80    {
81        let mut writer = writer;
82        match writer.write_all(&self.to_toml_string()?.into_bytes()) {
83            Ok(_) => Ok(()),
84            Err(err) => Err(serde_toml::ser::Error::custom(err.to_string())),
85        }
86    }
87
88    fn to_toml_writer_pretty<W>(&self, writer: W) -> Result<(), serde_toml::ser::Error>
89    where
90        W: std::io::Write,
91    {
92        let mut writer = writer;
93        match writer.write_all(&self.to_toml_string_pretty()?.into_bytes()) {
94            Ok(_) => Ok(()),
95            Err(err) => Err(serde_toml::ser::Error::custom(err.to_string())),
96        }
97    }
98}