aboutsummaryrefslogtreecommitdiff
path: root/src/arg_util.rs
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2020-09-05 13:18:50 +0200
committerRobin Krahl <robin.krahl@ireas.org>2020-09-05 13:34:27 +0200
commitbb809992ad543ea4c0c31897fbf2d130394dd80e (patch)
treee22b26d7eb2236efa83bbc9de50065263a16c1c3 /src/arg_util.rs
parent04b4262cdf4bbb4e2698d8ce51a261bf294a2da3 (diff)
downloadnitrocli-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.rs16
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)
+ }
+ }
};
}