Add the gegl_enum macro to generate enums with Display implemented.
This commit is contained in:
		
							parent
							
								
									f7e91d69cc
								
							
						
					
					
						commit
						263e9131c0
					
				| 
						 | 
				
			
			@ -43,3 +43,31 @@ macro_rules! gegl_operation {
 | 
			
		|||
    }
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// A macro to generate an enum that implements [`std::fmt::Display`].
 | 
			
		||||
#[macro_export]
 | 
			
		||||
macro_rules! gegl_enum {
 | 
			
		||||
  (
 | 
			
		||||
    $enum_name:ident,
 | 
			
		||||
    $($key:ident: $value:expr),*,
 | 
			
		||||
  ) => {
 | 
			
		||||
    #[doc = "TODO: Generate documentation for [`gegl_enum!`]."]
 | 
			
		||||
    #[derive(Debug)]
 | 
			
		||||
    pub enum $enum_name {
 | 
			
		||||
      $(
 | 
			
		||||
        #[doc = "TODO: Generate documentation for [`gegl_enum!`]."]
 | 
			
		||||
        $key,
 | 
			
		||||
      )*
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    impl std::fmt::Display for $enum_name {
 | 
			
		||||
      fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 | 
			
		||||
        let display = match self {
 | 
			
		||||
          $($enum_name::$key => $value,)*
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        write!(f, "{display}")
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in New Issue