extern crate clang;
use clang::*;
fn main() {
let clang = Clang::new().unwrap();
let index = Index::new(&clang, false, false);
let tu = index.parser("examples/structs.c").parse().unwrap();
let structs = tu
.get_entity()
.get_children()
.into_iter()
.filter(|e| e.get_kind() == EntityKind::StructDecl)
.collect::<Vec<_>>();
for struct_ in structs {
let type_ = struct_.get_type().unwrap();
let size = type_.get_sizeof().unwrap();
println!(
"struct: {:?} (size: {} bytes)",
struct_.get_name().unwrap(),
size
);
for field in struct_.get_children() {
let name = field.get_name().unwrap();
let offset = type_.get_offsetof(&name).unwrap();
println!(" field: {:?} (offset: {} bits)", name, offset);
}
}
}