pclass-parser 0.1.0

https://github.com/phodal/pclass-parser
Documentation
use crate::{Version, ConstantPool, FieldInfo, MethodInfo};
use crate::classfile::types::U2;
use crate::classfile::attributes::{InnerClass, Type};

#[derive(Debug)]
pub struct ClassFile {
    pub version: Version,
    pub cp: ConstantPool,
    pub acc_flags: U2,
    pub this_class: U2,
    pub super_class: U2,
    pub interfaces: Vec<U2>,
    pub fields: Vec<FieldInfo>,
    pub methods: Vec<MethodInfo>,
    pub attrs: Vec<Type>,
}

impl ClassFile {
    pub fn inner_classes(&self) -> Option<Vec<InnerClass>> {
        for it in self.attrs.iter() {
            if let Type::InnerClasses { classes } = it {
                return Some(classes.clone());
            }
        }

        None
    }

    pub fn signature(&self) -> Option<usize> {
        for it in self.attrs.iter() {
            if let Type::Signature { signature_index} = it {
                return Some(*signature_index as usize);
            }
        }

        None
    }
}