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}