1use std::{ffi::CString, os::raw::c_int};
2
3use crate::{DataType, Error, Register};
4
5pub(crate) fn check_ret<T>(ret: c_int, out: T) -> Result<T, Error> {
6 if ret == 0 {
7 Ok(out)
8 } else {
9 Err(ret.into())
10 }
11}
12
13pub fn name_to_reg(name: &CString) -> Result<Option<Register>, Error> {
18 let mut address: c_int = -1;
19 let mut data_type: c_int = ffi::LJM_INVALID_NAME_ADDRESS;
20 unsafe {
21 let ret = ffi::LJM_NameToAddress(name.as_ptr(), &mut address, &mut data_type);
22 let reg = DataType::try_from(data_type)
23 .ok()
24 .map(|data_type| Register { address, data_type });
25 check_ret(ret, reg)
26 }
27}