use std::os::raw::{c_char, c_int};
pub const MAXVAL: usize = 20;
pub const ATOM_EL_LEN: usize = 6;
pub const NUM_H_ISOTOPES: usize = 3;
#[repr(C)]
#[derive(Clone)]
pub struct InchiAtom {
pub x: f64,
pub y: f64,
pub z: f64,
pub neighbor: [i16; MAXVAL],
pub bond_type: [i8; MAXVAL],
pub bond_stereo: [i8; MAXVAL],
pub elname: [c_char; ATOM_EL_LEN],
pub num_bonds: i16,
pub num_iso_h: [i8; NUM_H_ISOTOPES + 1],
pub isotopic_mass: i16,
pub radical: i8,
pub charge: i8,
}
impl Default for InchiAtom {
fn default() -> Self {
unsafe { std::mem::zeroed() }
}
}
#[repr(C)]
#[derive(Clone, Default)]
pub struct InchiStereo0D {
pub neighbor: [i16; 4],
pub central_atom: i16,
pub stereo_type: i8,
pub parity: i8,
}
#[repr(C)]
pub struct InchiInput {
pub atom: *mut InchiAtom,
pub stereo0d: *mut InchiStereo0D,
pub options: *const c_char,
pub num_atoms: i16,
pub num_stereo0d: i16,
}
#[repr(C)]
pub struct InchiOutput {
pub sz_inchi: *mut c_char,
pub sz_aux_info: *mut c_char,
pub sz_message: *mut c_char,
pub sz_log: *mut c_char,
}
unsafe extern "C" {
pub fn GetStdINCHI(inp: *mut InchiInput, out: *mut InchiOutput) -> c_int;
pub fn FreeStdINCHI(out: *mut InchiOutput);
pub fn GetStdINCHIKeyFromStdINCHI(inchi: *const c_char, key: *mut c_char) -> c_int;
}
const _: () = {
assert!(std::mem::size_of::<InchiAtom>() == 120);
};