Expand description
§Biosyn: Mad Science Crate for working with syn
§Features
-
biosyn::discriminantprovides utility functions to obtainstd::mem::Discriminant<T>instances for variants ofsynenums. -
- Individual
synenums can be imported likebiosyn::discriminant::item
- Individual
-
- Often it’s more ergonomic to just use the re-exports from
biosyn::discriminantdirectly
- Often it’s more ergonomic to just use the re-exports from
-
biosyn::split_by_discriminantprovides integration with thesplit_by_discriminantcrate forsynenums. -
- Includes implementations of the ExtractFrom trait for
synenums on a typecrate::split_by_discriminant::BiosynExtractor.
- Includes implementations of the ExtractFrom trait for
-
- 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
Modules§
- discriminant
- Discriminant helpers for various
synAST variants. - split_
by_ discriminant split_by_discriminant - Integration with the
split_by_discriminantcrate forsynAST enum types.