classfile_parser/field_info/
parser.rs

1use nom::{multi::count, number::complete::be_u16, IResult};
2
3use attribute_info::attribute_parser;
4
5use field_info::{FieldAccessFlags, FieldInfo};
6
7pub fn field_parser(input: &[u8]) -> IResult<&[u8], FieldInfo> {
8    let (input, access_flags) = be_u16(input)?;
9    let (input, name_index) = be_u16(input)?;
10    let (input, descriptor_index) = be_u16(input)?;
11    let (input, attributes_count) = be_u16(input)?;
12    let (input, attributes) = count(attribute_parser, attributes_count as usize)(input)?;
13    Ok((
14        input,
15        FieldInfo {
16            access_flags: FieldAccessFlags::from_bits_truncate(access_flags),
17            name_index,
18            descriptor_index,
19            attributes_count,
20            attributes,
21        },
22    ))
23}