A parser for Java Classfiles, written in Rust using nom.
Classfile Parser is available from crates.io and can be included in your Cargo enabled project like this:
[dependencies]
classfile-parser = "~0.3"extern crate classfile_parser;
use classfile_parser::class_parser;
fn main() {
    let classfile_bytes = include_bytes!("../path/to/JavaClass.class");
    
    match class_parser(classfile_bytes) {
        Ok((_, class_file)) => {
            println!(
                "version {},{} \
                 const_pool({}), \
                 this=const[{}], \
                 super=const[{}], \
                 interfaces({}), \
                 fields({}), \
                 methods({}), \
                 attributes({}), \
                 access({:?})",
                class_file.major_version,
                class_file.minor_version,
                class_file.const_pool_size,
                class_file.this_class,
                class_file.super_class,
                class_file.interfaces_count,
                class_file.fields_count,
                class_file.methods_count,
                class_file.attributes_count,
                class_file.access_flags
            );
        }
        Err(_) => panic!("Failed to parse"),
    };
}-  Header
- Magic const
- Version info
 
-  Constant pool
- Constant pool size
-  Constant types
- Utf8
- Integer
- Float
- Long
- Double
- Class
- String
- Fieldref
- Methodref
- InterfaceMethodref
- NameAndType
- MethodHandle
- MethodType
- InvokeDynamic
 
 
- Access flags
- This class
- Super class
- Interfaces
- Fields
- Methods
-  Attributes
- Basic attribute info block parsing
-  Known typed attributes parsing
-  Critical for JVM
- ConstantValue
- Code
- StackMapTable
- Exceptions
- BootstrapMethods
 
-  Critical for Java SE
- InnerClasses
- EnclosingMethod
- Synthetic
- Signature
- RuntimeVisibleAnnotations
- RuntimeInvisibleAnnotations
- RuntimeVisibleParameterAnnotations
- RuntimeInvisibleParameterAnnotations
- RuntimeVisibleTypeAnnotations
- RuntimeInvisibleTypeAnnotations
- AnnotationDefault
- MethodParameters
 
-  Useful but not critical
- SourceFile
- SourceDebugExtension
- LineNumberTable
- LocalVariableTable
- LocalVariableTypeTable
- Deprecated
 
 
-  Critical for JVM