Biosyn: Mad Science Crate for working with syn
Features
-
biosyn::discriminant provides utility functions to obtain std::mem::Discriminant<T> instances for variants of syn enums.
-
- Individual
syn enums can be imported like biosyn::discriminant::item
-
- Often it's more ergonomic to just use the re-exports from
biosyn::discriminant directly
-
biosyn::split_by_discriminant provides integration with the split_by_discriminant crate for syn enums.
-
- Includes implementations of the ExtractFrom trait for
syn enums on a type [crate::split_by_discriminant::BiosynExtractor].
-
- Can be optionally disabled, but is enabled by default.
Usage
Discriminant helpers
use biosyn::discriminant::{item_fn_discriminant, item_struct_discriminant};
use std::mem::discriminant;
use syn::{Item, parse_quote};
let item: Item = parse_quote! { fn foo() {} };
assert_eq!(discriminant(&item), item_fn_discriminant());
assert_ne!(discriminant(&item), item_struct_discriminant());
Splitting a Vec by variant
use biosyn::discriminant::item_fn_discriminant;
use biosyn::split_by_discriminant::make_biosyn_extractor;
use syn::{Item, ItemFn, parse_quote};
let mut items: Vec<Item> = vec![
parse_quote! { fn alpha() {} },
parse_quote! { fn beta(x: i32) -> i32 { x } },
parse_quote! { struct NotAFn; },
];
let disc = item_fn_discriminant();
let mut ext = make_biosyn_extractor(&mut items, &[disc]);
let fns: Vec<&mut ItemFn> = ext.extract(disc).expect("found ItemFn group");
assert_eq!(fns.len(), 2);
Optional Features
split_by_discriminant - currently enabled by default