@@ -33,18 +33,7 @@ impl Parse for FieldDef {
3333 let _: Token ! [ : ] = input. parse ( ) ?;
3434 let ty: Ident = input. parse ( ) ?;
3535
36- let ty_str = ty. to_string ( ) ;
37- let ty_str = ty_str. as_str ( ) ;
38- if !ty_str. starts_with ( "u" ) {
39- return Err ( syn:: Error :: new_spanned ( ty, format ! ( "Invalid type {ty_str}, expected u{{1..128}}" ) ) ) ;
40- }
41- let size = * match & ty_str[ 1 ..] . parse :: < u8 > ( ) {
42- Ok ( val) => val,
43- Err ( e) => return Err ( syn:: Error :: new_spanned ( ty, format ! ( "Could not parse type size: {e}" ) ) ) ,
44- } ;
45- if size == 0 || size > 128 {
46- return Err ( syn:: Error :: new_spanned ( ty, format ! ( "Invalid size for {ty_str}, expected u{{1..128}}" ) ) ) ;
47- }
36+ let size = parse_bit_width ( & ty) ?;
4837
4938 Ok ( FieldDef { name, size } )
5039 }
@@ -55,7 +44,8 @@ pub fn parse_bit_width(ty: &syn::Ident) -> Result<u8> {
5544 if !ty_str. starts_with ( "u" ) {
5645 return Err ( syn:: Error :: new_spanned ( ty, format ! ( "Invalid type {ty_str}, expected u{{1..128}}" ) ) ) ;
5746 }
58- let size = ty_str[ 1 ..] . parse :: < u8 > ( )
47+ let size = ty_str[ 1 ..]
48+ . parse :: < u8 > ( )
5949 . map_err ( |e| syn:: Error :: new_spanned ( ty, format ! ( "Could not parse type size: {e}" ) ) ) ?;
6050 if size == 0 || size > 128 {
6151 return Err ( syn:: Error :: new_spanned ( ty, format ! ( "Invalid size for {ty_str}, expected u{{1..128}}" ) ) ) ;
0 commit comments