#[cxx::bridge]
pub mod ffi {
    unsafe extern "C++" {
        include!("LIEF/rust/PE/Factory.hpp");
        include!("LIEF/rust/COFF/Section.hpp");

        type PE_Binary = crate::pe::binary::ffi::PE_Binary;
        type PE_Section = crate::pe::section::ffi::PE_Section;

        type PE_Factory;

        #[Self = "PE_Factory"]
        fn create(pe_type: u32) -> UniquePtr<PE_Factory>;
        fn set_arch(self: Pin<&mut PE_Factory>, arch: u32);
        fn set_entrypoint(self: Pin<&mut PE_Factory>, ep: u64);
        fn add_section(self: Pin<&mut PE_Factory>, section: &PE_Section);
        fn get(self: Pin<&mut PE_Factory>) -> UniquePtr<PE_Binary>;
        fn is_32bit(self: &PE_Factory) -> bool;
        fn is_64bit(self: &PE_Factory) -> bool;
        fn section_align(self: &PE_Factory) -> u32;
        fn file_align(self: &PE_Factory) -> u32;
    }
    impl UniquePtr<PE_Factory> {}
}