random-constructible-derive 0.13.0

Provides a derive macro for the random-constructible crate which is used for creating random instances of enums with weighted probabilities
Documentation
// ---------------- [ File: random-constructible-derive/src/extract_from_attribute.rs ]
crate::ix!();

pub fn extract_probability_from_attribute(attr: &syn::Attribute) 
    -> Option<f64> 
{
    if attr.path.is_ident("rand_construct") {
        if let Ok(syn::Meta::List(meta_list)) = attr.parse_meta() {
            return extract_probability_from_meta_list(&meta_list);
        }
    }
    None
}

#[cfg(test)]
mod tests {
    use super::*;
    use syn::{Attribute, Meta, MetaList, NestedMeta, Path};

    #[test]
    fn test_extract_probability_with_valid_attribute() {

        let attr: Attribute = parse_quote!(#[rand_construct(p = 0.85)]);

        let result = extract_probability_from_attribute(&attr);

        assert_eq!(result, Some(0.85));
    }

    #[test]
    fn test_extract_probability_with_non_matching_attribute() {

        let attr: Attribute = parse_quote!(#[other_construct(p = 0.85)]);

        let result = extract_probability_from_attribute(&attr);

        assert_eq!(result, None);
    }

    #[test]
    fn test_extract_probability_with_invalid_meta() {

        let attr: Attribute = parse_quote!(#[rand_construct(invalid_meta_format)]);

        let result = extract_probability_from_attribute(&attr);

        assert_eq!(result, None);
    }
}