#[macro_export]
macro_rules! nt_unicode_str {
($text:expr) => {{
const U16CSTR: &'static $crate::widestring::U16CStr = $crate::widestring::u16cstr!($text);
let buffer = U16CSTR.as_slice_with_nul();
let maximum_length_in_elements = buffer.len();
let maximum_length_in_bytes = maximum_length_in_elements * ::core::mem::size_of::<u16>();
assert!(
maximum_length_in_bytes <= ::core::primitive::u16::MAX as usize,
"String is too long (resulting byte length exceeds a u16)"
);
let maximum_length = maximum_length_in_bytes as u16;
assert!(maximum_length >= ::core::mem::size_of::<u16>() as u16);
let length = maximum_length - ::core::mem::size_of::<u16>() as u16;
unsafe {
$crate::unicode_string::NtUnicodeStr::from_raw_parts(
buffer.as_ptr(),
length,
maximum_length,
)
}
}};
}
#[cfg(test)]
mod tests {
use crate::unicode_string::NtUnicodeStr;
const TEST_STR: NtUnicodeStr<'static> = nt_unicode_str!("Moin");
#[test]
fn test_nt_unicode_str() {
assert_eq!(TEST_STR, "Moin");
assert_eq!(TEST_STR.len(), 8);
assert_eq!(TEST_STR.capacity(), 10);
}
}