macro_tools 0.85.0

Tools for writing procedural macroses.
Documentation
use super :: *;

//

//

#[ test ]
fn named_fields_with_named_fields() 
{
  use syn :: { parse_quote, punctuated ::Punctuated, Field, token ::Comma };
  use the_module ::derive;

  let ast: syn ::DeriveInput = parse_quote! {
  struct Test
  {
   a: i32,
   b: String,
 }
 };

  let result = derive ::named_fields(&ast).expect("Expected successful extraction of named fields");

  let mut expected_fields = Punctuated ::new();
  let field_a: Field = parse_quote! { a: i32 };
  let field_b: Field = parse_quote! { b: String };
  expected_fields.push_value(field_a);
  expected_fields.push_punct(Comma ::default());
  expected_fields.push_value(field_b);
  expected_fields.push_punct(Comma ::default());

  assert_eq!(
  format!("{result:?}"),
  format!("{expected_fields:?}"),
  "Fields did not match expected output"
 );
}

//

#[ test ]
fn named_fields_with_tuple_struct() 
{
  use syn :: { parse_quote };
  use the_module ::derive ::named_fields;

  let ast: syn ::DeriveInput = parse_quote! {
  struct Test( i32, String );
 };

  let result = named_fields(&ast);

  assert!(
  result.is_err(),
  "Expected an error for tuple struct, but extraction was successful"
 );
}

//

#[ test ]
fn named_fields_with_enum() 
{
  use syn :: { parse_quote };
  use the_module ::derive ::named_fields;

  let ast: syn ::DeriveInput = parse_quote! {
  enum Test
  {
   Variant1,
   Variant2,
 }
 };

  let result = named_fields(&ast);

  assert!(result.is_err(), "Expected an error for enum, but extraction was successful");
}