bindgen_jni/class_file_visitor/
header.rs

1use super::*;
2use std::io;
3
4/// [Java SE 7 § 4.1](https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.1):  The first few fields of a given ClassFile.
5#[repr(C)]
6#[derive(Clone, Copy, Debug, Default)]
7pub struct Header {
8    pub magic:          [u8; 4],
9    pub minor_version:  u16,
10    pub major_version:  MajorVersion,
11}
12
13impl Header {
14    pub(crate) fn read(reader: &mut impl Read) -> io::Result<Header> {
15        let mut h = Header::default();
16        reader.read_exact(&mut h.magic)?;
17        if h.magic != [0xCA, 0xFE, 0xBA, 0xBE] { return Err(io::Error::new(io::ErrorKind::InvalidData, "Invalid header magic, not a class file")); }
18        h.minor_version = read_u2(reader)?;
19        h.major_version = MajorVersion::from(read_u2(reader)?);
20        Ok(h)
21    }
22}