quartz_cli/validator.rs
1use serde_json;
2use toml::Value as TomlValue;
3
4use crate::QuartzResult;
5
6/// Validator for files that don't have to do any checks. It is
7/// garanteed to return [`Ok`].
8///
9/// # Examples
10///
11/// ```
12/// use quartz_cli::validator;
13///
14/// // Totally broken JSON input
15/// let input = r#"
16/// {
17/// "value":
18/// "#;
19///
20/// assert!(validator::infallible(input).is_ok());
21/// ```
22pub fn infallible(_input: &str) -> QuartzResult {
23 Ok(())
24}
25
26/// Checks if a string is valid TOML.
27///
28/// Alias for `toml_as::<toml::Value>()`.
29///
30/// # Examples
31///
32/// ```
33/// use quartz_cli::validator;
34///
35/// let input = r#"
36/// {
37/// "value": 10
38/// }
39/// "#;
40///
41/// assert!(validator::json(input).is_ok());
42///
43/// let input = r#"
44/// {
45/// "value": 10,
46/// }
47/// "#;
48///
49/// assert!(validator::json(input).is_err());
50/// ```
51pub fn json(input: &str) -> QuartzResult {
52 serde_json::from_str::<serde_json::Value>(input)?;
53
54 Ok(())
55}
56
57/// Checks if a string is valid TOML.
58///
59/// Alias for `toml_as::<toml::Value>()`.
60///
61/// # Examples
62///
63/// ```
64/// use quartz_cli::validator;
65///
66/// let input = r#"
67/// title = 'TOML Example'
68///
69/// [owner]
70/// name = 'Lisa'
71/// "#;
72///
73/// assert!(validator::toml(input).is_ok());
74/// ```
75pub fn toml(input: &str) -> QuartzResult {
76 toml_as::<TomlValue>(input)
77}
78
79/// Checks if a string is valid TOML for `T`.
80///
81/// # Examples
82///
83/// ```
84/// use serde::Deserialize;
85/// use quartz_cli::validator;
86///
87/// #[derive(Deserialize)]
88/// struct Config {
89/// title: String,
90/// owner: Owner,
91/// }
92///
93/// #[derive(Deserialize)]
94/// struct Owner {
95/// name: String,
96/// }
97///
98/// let input = r#"
99/// title = 'TOML Example'
100///
101/// [owner]
102/// name = 'Lisa'
103/// "#;
104///
105/// let input_missing = r#"
106/// title = 'TOML Example'
107///
108/// [owner]
109/// "#;
110///
111///
112/// assert!(validator::toml_as::<Config>(input).is_ok());
113/// assert!(validator::toml_as::<Config>(input_missing).is_err());
114/// ```
115pub fn toml_as<T>(input: &str) -> QuartzResult
116where
117 T: serde::de::DeserializeOwned,
118{
119 toml::from_str::<T>(input)?;
120
121 Ok(())
122}