classfile_parser/method_info/
parser.rs

1use nom::{multi::count, number::complete::be_u16, IResult};
2
3use attribute_info::attribute_parser;
4
5use method_info::{MethodAccessFlags, MethodInfo};
6
7pub fn method_parser(input: &[u8]) -> IResult<&[u8], MethodInfo> {
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        MethodInfo {
16            access_flags: MethodAccessFlags::from_bits_truncate(access_flags),
17            name_index,
18            descriptor_index,
19            attributes_count,
20            attributes,
21        },
22    ))
23}