mirror of
https://github.com/danog/strum.git
synced 2024-11-26 12:04:38 +01:00
Fix EnumCount with disabled variants (#268)
Do not include disabled variants in the count with EnumCount. Fixes #267
This commit is contained in:
parent
025b1b5687
commit
67f0d1947d
@ -2,11 +2,18 @@ use proc_macro2::TokenStream;
|
||||
use quote::quote;
|
||||
use syn::{Data, DeriveInput};
|
||||
|
||||
use crate::helpers::variant_props::HasStrumVariantProperties;
|
||||
use crate::helpers::{non_enum_error, HasTypeProperties};
|
||||
|
||||
pub(crate) fn enum_count_inner(ast: &DeriveInput) -> syn::Result<TokenStream> {
|
||||
let n = match &ast.data {
|
||||
Data::Enum(v) => v.variants.len(),
|
||||
Data::Enum(v) => v.variants.iter().try_fold(0usize, |acc, v| {
|
||||
if v.get_variant_properties()?.disabled.is_none() {
|
||||
Ok::<usize, syn::Error>(acc + 1usize)
|
||||
} else {
|
||||
Ok::<usize, syn::Error>(acc)
|
||||
}
|
||||
})?,
|
||||
_ => return Err(non_enum_error()),
|
||||
};
|
||||
let type_properties = ast.get_type_properties()?;
|
||||
|
@ -11,12 +11,29 @@ enum Week {
|
||||
Saturday,
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
#[derive(Debug, EnumCount, EnumIter)]
|
||||
enum Pets {
|
||||
Dog,
|
||||
Cat,
|
||||
Fish,
|
||||
Bird,
|
||||
#[strum(disabled)]
|
||||
Hamster,
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn simple_test() {
|
||||
assert_eq!(7, Week::COUNT);
|
||||
assert_eq!(Week::iter().count(), Week::COUNT);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn disabled_test() {
|
||||
assert_eq!(4, Pets::COUNT);
|
||||
assert_eq!(Pets::iter().count(), Pets::COUNT);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn crate_module_path_test() {
|
||||
pub mod nested {
|
||||
|
Loading…
Reference in New Issue
Block a user