diff options
author | Robin Krahl <robin.krahl@ireas.org> | 2020-09-05 13:18:50 +0200 |
---|---|---|
committer | Robin Krahl <robin.krahl@ireas.org> | 2020-09-05 13:34:27 +0200 |
commit | bb809992ad543ea4c0c31897fbf2d130394dd80e (patch) | |
tree | e22b26d7eb2236efa83bbc9de50065263a16c1c3 /src/arg_util.rs | |
parent | 04b4262cdf4bbb4e2698d8ce51a261bf294a2da3 (diff) | |
download | nitrocli-bb809992ad543ea4c0c31897fbf2d130394dd80e.tar.gz nitrocli-bb809992ad543ea4c0c31897fbf2d130394dd80e.tar.bz2 |
Add json output format
This patch adds a new output format, JSON. It uses serde to serialize
the output types.
todo: man page, changelog
Diffstat (limited to 'src/arg_util.rs')
-rw-r--r-- | src/arg_util.rs | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/arg_util.rs b/src/arg_util.rs index b1dd60f..86c5f48 100644 --- a/src/arg_util.rs +++ b/src/arg_util.rs @@ -54,7 +54,8 @@ macro_rules! Command { macro_rules! Enum { ( $(#[$docs:meta])* $name:ident, [ $( $var:ident => $str:expr, ) *] ) => { $(#[$docs])* - #[derive(Clone, Copy, Debug, PartialEq)] + #[derive(Clone, Copy, Debug, PartialEq, serde::Serialize)] + #[serde(rename_all = "lowercase")] pub enum $name { $( $var, @@ -126,6 +127,19 @@ macro_rules! enum_int { } } } + + impl<'de> ::serde::Deserialize<'de> for $name { + fn deserialize<D>(deserializer: D) -> Result<$name, D::Error> + where + D: ::serde::Deserializer<'de>, + { + use ::serde::de::Error as _; + use ::std::str::FromStr as _; + + let s = String::deserialize(deserializer)?; + $name::from_str(&s).map_err(D::Error::custom) + } + } }; } |