1
0
Fork 0
mirror of https://codeberg.org/icewind/bitbuffer.git synced 2026-06-04 00:54:07 +02:00

remove the need for "full" syn

This commit is contained in:
Robin Appelman 2019-06-22 14:13:52 +02:00
commit bbbce0f8cf
3 changed files with 15 additions and 9 deletions

View file

@ -12,7 +12,7 @@ name = "bitstream_reader_derive"
proc-macro = true proc-macro = true
[dependencies] [dependencies]
syn = { version = "0.15", features = ["full"] } syn = { version = "0.15" }
quote = "0.6" quote = "0.6"
proc-macro2 = "0.4" proc-macro2 = "0.4"

View file

@ -140,7 +140,7 @@ use quote::{quote, quote_spanned};
use syn::spanned::Spanned; use syn::spanned::Spanned;
use syn::{ use syn::{
parse_macro_input, parse_quote, parse_str, Attribute, Data, DeriveInput, Expr, Fields, Ident, parse_macro_input, parse_quote, parse_str, Attribute, Data, DeriveInput, Expr, Fields, Ident,
Lit, LitStr, Meta, Pat, Path, Lit, LitStr, Meta, Path,
}; };
/// See the [crate documentation](index.html) for details /// See the [crate documentation](index.html) for details
@ -151,7 +151,7 @@ use syn::{
pub fn derive_bitread(input: proc_macro::TokenStream) -> proc_macro::TokenStream { pub fn derive_bitread(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
derive_bitread_trait(input, "BitRead".to_owned(), None) derive_bitread_trait(input, "BitRead".to_owned(), None)
} }
//
/// See the [crate documentation](index.html) for details /// See the [crate documentation](index.html) for details
#[proc_macro_derive( #[proc_macro_derive(
BitReadSized, BitReadSized,
@ -304,10 +304,6 @@ fn parse(data: &Data, struct_name: &Ident, attrs: &Vec<Attribute>) -> TokenStrea
.map(|(variant, discriminant)| { .map(|(variant, discriminant)| {
let span = variant.span(); let span = variant.span();
let variant_name = &variant.ident; let variant_name = &variant.ident;
let discriminant_string = discriminant
.map(|value| value.to_string())
.unwrap_or("_".to_string());
let discriminant = parse_str::<Pat>(discriminant_string.as_str()).unwrap();
let read_fields = match &variant.fields { let read_fields = match &variant.fields {
Fields::Unit => quote_spanned! {span=> Fields::Unit => quote_spanned! {span=>
#struct_name::#variant_name #struct_name::#variant_name
@ -332,8 +328,15 @@ fn parse(data: &Data, struct_name: &Ident, attrs: &Vec<Attribute>) -> TokenStrea
} }
_ => unimplemented!(), _ => unimplemented!(),
}; };
quote_spanned! {span=>
#discriminant => #read_fields, if let Some(discriminant) = discriminant {
quote_spanned! {span=>
#discriminant => #read_fields,
}
} else {
quote_spanned! {span=>
_ => #read_fields,
}
} }
}); });

View file

@ -1,3 +1,6 @@
#![allow(dead_code)]
#![allow(unreachable_patterns)]
use bitstream_reader::{ use bitstream_reader::{
bit_size_of, bit_size_of_sized, BigEndian, BitBuffer, BitStream, Endianness, LittleEndian, bit_size_of, bit_size_of_sized, BigEndian, BitBuffer, BitStream, Endianness, LittleEndian,
}; };