use std::ffi::{
CStr,
CString,
};
use std::ptr::{
self,
addr_of_mut,
};
use crate::ffi::c_util::hedera_string_free;
use crate::ffi::error::Error;
use crate::ffi::key::public::{
hedera_public_key_free,
hedera_public_key_from_string,
hedera_public_key_to_string,
};
#[test]
fn ed25519_from_str() {
const PK: &str =
"302a300506032b6570032100e0c8ec2758a5879ffac226a13c0c516b799e72e35141a0dd828f94d37988a4b7";
let pk_str = CString::new(PK).unwrap();
let s = {
let pk = {
let mut pk = ptr::null_mut();
let error = unsafe { hedera_public_key_from_string(pk_str.as_ptr(), addr_of_mut!(pk)) };
assert_eq!(error, Error::Ok);
pk
};
let s = {
let ptr = unsafe { hedera_public_key_to_string(pk) };
let s = {
let s = unsafe { CStr::from_ptr(ptr) };
s.to_str().unwrap().to_owned()
};
unsafe { hedera_string_free(ptr) };
s
};
unsafe { hedera_public_key_free(pk) };
s
};
assert_eq!(PK, s)
}