1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use nom::{be_u16, IResult};

use attribute_info::attribute_parser;

use field_info::{FieldAccessFlags, FieldInfo};

pub fn field_parser(input: &[u8]) -> IResult<&[u8], FieldInfo> {
    do_parse!(
        input,
        access_flags: be_u16
            >> name_index: be_u16
            >> descriptor_index: be_u16
            >> attributes_count: be_u16
            >> attributes: count!(attribute_parser, attributes_count as usize)
            >> (FieldInfo {
                access_flags: FieldAccessFlags::from_bits_truncate(access_flags),
                name_index,
                descriptor_index,
                attributes_count,
                attributes,
            })
    )
}