Skip to main content

Crate biosyn

Crate biosyn 

Source
Expand description

§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.

    • 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 syn AST variants.
split_by_discriminantsplit_by_discriminant
Integration with the split_by_discriminant crate for syn AST enum types.