biosyn 0.1.0

Mad Science Crate for working with [`syn`](https://crates.io/crates/syn)
Documentation
# Biosyn: Mad Science Crate for working with [`syn`]https://crates.io/crates/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`]https://crates.io/crates/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


```rust
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


```rust
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