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

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