]> git.lizzy.rs Git - rust.git/blobdiff - src/config/options.rs
Fix help message for edition config option
[rust.git] / src / config / options.rs
index 7dca87e17775382159f264dc1a6e4332168c5a73..34b6ea0dde6584a1976746bc6bc48cb9bf48a63b 100644 (file)
 use std::collections::HashSet;
 use std::path::{Path, PathBuf};
 
-/// Macro for deriving implementations of Serialize/Deserialize for enums
+/// Macro that will stringify the enum variants or a provided textual repr
 #[macro_export]
-macro_rules! impl_enum_serialize_and_deserialize {
-    (@stringify $variant:ident) => (
+macro_rules! configuration_option_enum_stringify {
+    ($variant:ident) => {
         stringify!($variant)
-    );
+    };
 
-    (@stringify $_variant:ident: $value:expr) => (
+    ($_variant:ident: $value:expr) => {
         stringify!($value)
-    );
+    };
+}
 
+/// Macro for deriving implementations of Serialize/Deserialize for enums
+#[macro_export]
+macro_rules! impl_enum_serialize_and_deserialize {
     ( $e:ident, $( $variant:ident $(: $value:expr)* ),* ) => {
         impl ::serde::ser::Serialize for $e {
             fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
@@ -40,7 +44,7 @@ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
                 match *self {
                     $(
                         $e::$variant => serializer.serialize_str(
-                            impl_enum_serialize_and_deserialize!(@stringify $variant $(: $value)*)
+                            configuration_option_enum_stringify!($variant $(: $value)*)
                         ),
                     )*
                     _ => {
@@ -69,13 +73,13 @@ fn visit_str<E>(self, value: &str) -> Result<String, E> {
                 }
                 let s = d.deserialize_string(StringOnly::<D>(PhantomData))?;
                 $(
-                    if impl_enum_serialize_and_deserialize!(@stringify $variant $(: $value)*)
+                    if configuration_option_enum_stringify!($variant $(: $value)*)
                         .eq_ignore_ascii_case(&s) {
                       return Ok($e::$variant);
                     }
                 )*
                 static ALLOWED: &'static[&str] = &[
-                    $(impl_enum_serialize_and_deserialize!(@stringify $variant $(: $value)*),)*];
+                    $(configuration_option_enum_stringify!($variant $(: $value)*),)*];
                 Err(D::Error::unknown_variant(&s, ALLOWED))
             }
         }
@@ -85,7 +89,7 @@ impl ::std::str::FromStr for $e {
 
             fn from_str(s: &str) -> Result<Self, Self::Err> {
                 $(
-                    if impl_enum_serialize_and_deserialize!(@stringify $variant $(: $value)*)
+                    if configuration_option_enum_stringify!($variant $(: $value)*)
                         .eq_ignore_ascii_case(s) {
                         return Ok($e::$variant);
                     }
@@ -99,7 +103,7 @@ fn doc_hint() -> String {
                 let mut variants = Vec::new();
                 $(
                     variants.push(
-                        impl_enum_serialize_and_deserialize!(@stringify $variant $(: $value)*)
+                        configuration_option_enum_stringify!($variant $(: $value)*)
                     );
                 )*
                 format!("[{}]", variants.join("|"))
@@ -110,11 +114,21 @@ fn doc_hint() -> String {
 
 macro_rules! configuration_option_enum {
     ($e:ident: $( $name:ident $(: $value:expr)* ),+ $(,)*) => (
-        #[derive(Copy, Clone, Eq, PartialEq, Debug)]
+        #[derive(Copy, Clone, Eq, PartialEq)]
         pub enum $e {
             $( $name ),+
         }
 
+        impl ::std::fmt::Debug for $e {
+            fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
+                f.write_str(match self {
+                    $(
+                        $e::$name => configuration_option_enum_stringify!($name $(: $value)*),
+                    )+
+                })
+            }
+        }
+
         impl_enum_serialize_and_deserialize!($e, $( $name $(: $value)* ),+);
     );
 }