use crate::ffi;
use std::ffi::CStr;
use std::os::raw::c_char;
unsafe fn copy_static_cstr(ptr: *const c_char) -> String {
if ptr.is_null() {
return String::new();
}
unsafe { CStr::from_ptr(ptr) }
.to_string_lossy()
.into_owned()
}
pub fn version() -> u32 {
unsafe { ffi::rnp_version() }
}
pub fn version_for(major: u32, minor: u32, patch: u32) -> u32 {
unsafe { ffi::rnp_version_for(major, minor, patch) }
}
pub fn version_major(v: u32) -> u32 {
unsafe { ffi::rnp_version_major(v) }
}
pub fn version_minor(v: u32) -> u32 {
unsafe { ffi::rnp_version_minor(v) }
}
pub fn version_patch(v: u32) -> u32 {
unsafe { ffi::rnp_version_patch(v) }
}
pub fn decompose() -> (u32, u32, u32) {
let v = version();
(version_major(v), version_minor(v), version_patch(v))
}
pub fn version_string() -> String {
unsafe { copy_static_cstr(ffi::rnp_version_string()) }
}
pub fn version_string_full() -> String {
unsafe { copy_static_cstr(ffi::rnp_version_string_full()) }
}
pub fn version_commit_timestamp() -> u64 {
unsafe { ffi::rnp_version_commit_timestamp() }
}
pub fn backend_string() -> String {
unsafe { copy_static_cstr(ffi::rnp_backend_string()) }
}
pub fn backend_version() -> String {
unsafe { copy_static_cstr(ffi::rnp_backend_version()) }
}