use crate::error::Result;
use crate::options::Options;
use crate::output::InchiOutput;
pub fn inchi_to_inchi(inchi: impl AsRef<str>, options: impl Into<Options>) -> Result<InchiOutput> {
let options = options.into();
let src = crate::raw::to_cstring(inchi.as_ref())?;
let opts = crate::raw::to_cstring(&options.to_arg_string())?;
let mut input = inchi_sys::inchi_InputINCHI {
szInChI: src.as_ptr() as *mut std::os::raw::c_char,
szOptions: opts.as_ptr() as *mut std::os::raw::c_char,
};
let _guard = crate::raw::lock();
let mut out = crate::raw::OutputGuard::new();
let rc = unsafe { inchi_sys::GetINCHIfromINCHI(&mut input, out.as_mut_ptr()) };
drop(src);
drop(opts);
crate::build_output(rc, &out)
}