use crate::cspcl_sys;
use crate::error::{Error, Result};
use std::ffi::CString;
pub fn endpoint_to_addr(endpoint: &str) -> Option<u8> {
let c_str = CString::new(endpoint).ok()?;
let addr = unsafe { cspcl_sys::cspcl_endpoint_to_addr(c_str.as_ptr()) };
if addr == 0 { None } else { Some(addr) }
}
pub fn addr_to_endpoint(addr: u8) -> Result<String> {
let mut buffer = [0u8; 32];
unsafe {
Error::from_code(cspcl_sys::cspcl_addr_to_endpoint(
addr,
buffer.as_mut_ptr() as *mut i8,
buffer.len(),
))?;
}
Ok(String::from_utf8_lossy(&buffer)
.trim_matches('\0')
.to_string())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_endpoint_conversion() {
let endpoint = "ipn:1.0";
if let Some(addr) = endpoint_to_addr(endpoint) {
assert_eq!(addr, 1);
}
}
}