pub struct UCString<C: UChar> { /* private fields */ }Expand description
An owned, mutable C-style “wide” string for FFI that is nul-aware and nul-terminated.
UCString is aware of nul values. Unless unchecked conversions are used, all UCString
strings end with a nul-terminator in the underlying buffer and contain no internal nul values.
The strings may still contain invalid or ill-formed UTF-16 or UTF-32 data. These strings are
intended to be used with FFI functions such as Windows API that may require nul-terminated
strings.
UCString can be converted to and from many other string types, including UString,
OsString, and String, making proper Unicode FFI safe and easy.
Please prefer using the type aliases U16CString or U32CString or WideCString to using
this type directly.
§Examples
The following example constructs a U16CString and shows how to convert a U16CString to a
regular Rust String.
use widestring::U16CString;
let s = "Test";
// Create a wide string from the rust string
let wstr = U16CString::from_str(s).unwrap();
// Convert back to a rust string
let rust_str = wstr.to_string_lossy();
assert_eq!(rust_str, "Test");The same example using U32CString:
use widestring::U32CString;
let s = "Test";
// Create a wide string from the rust string
let wstr = U32CString::from_str(s).unwrap();
// Convert back to a rust string
let rust_str = wstr.to_string_lossy();
assert_eq!(rust_str, "Test");Implementations§
Source§impl<C: UChar> UCString<C>
impl<C: UChar> UCString<C>
Sourcepub fn new(v: impl Into<Vec<C>>) -> Result<Self, NulError<C>>
pub fn new(v: impl Into<Vec<C>>) -> Result<Self, NulError<C>>
Constructs a UCString from a container of wide character data.
This method will consume the provided data and use the underlying elements to construct a new string. The data will be scanned for invalid nul values.
§Failures
This function will return an error if the data contains a nul value.
The returned error will contain the Vec as well as the position of the nul value.
§Examples
use widestring::U16CString;
let v = vec![84u16, 104u16, 101u16]; // 'T' 'h' 'e'
// Create a wide string from the vector
let wcstr = U16CString::new(v).unwrap();use widestring::U32CString;
let v = vec![84u32, 104u32, 101u32]; // 'T' 'h' 'e'
// Create a wide string from the vector
let wcstr = U32CString::new(v).unwrap();The following example demonstrates errors from nul values in a vector.
use widestring::U16CString;
let v = vec![84u16, 0u16, 104u16, 101u16]; // 'T' NUL 'h' 'e'
// Create a wide string from the vector
let res = U16CString::new(v);
assert!(res.is_err());
assert_eq!(res.err().unwrap().nul_position(), 1);use widestring::U32CString;
let v = vec![84u32, 0u32, 104u32, 101u32]; // 'T' NUL 'h' 'e'
// Create a wide string from the vector
let res = U32CString::new(v);
assert!(res.is_err());
assert_eq!(res.err().unwrap().nul_position(), 1);Sourcepub fn from_vec_with_nul(
v: impl Into<Vec<C>>,
) -> Result<Self, MissingNulError<C>>
pub fn from_vec_with_nul( v: impl Into<Vec<C>>, ) -> Result<Self, MissingNulError<C>>
Constructs a UCString from a nul-terminated container of UTF-16 or UTF-32 data.
This method will consume the provided data and use the underlying elements to construct a new string. The string will be truncated at the first nul value in the string.
§Failures
This function will return an error if the data does not contain a nul to terminate the
string. The returned error will contain the consumed Vec.
§Examples
use widestring::U16CString;
let v = vec![84u16, 104u16, 101u16, 0u16]; // 'T' 'h' 'e' NUL
// Create a wide string from the vector
let wcstr = U16CString::from_vec_with_nul(v).unwrap();use widestring::U32CString;
let v = vec![84u32, 104u32, 101u32, 0u32]; // 'T' 'h' 'e' NUL
// Create a wide string from the vector
let wcstr = U32CString::from_vec_with_nul(v).unwrap();The following example demonstrates errors from missing nul values in a vector.
use widestring::U16CString;
let v = vec![84u16, 104u16, 101u16]; // 'T' 'h' 'e'
// Create a wide string from the vector
let res = U16CString::from_vec_with_nul(v);
assert!(res.is_err());use widestring::U32CString;
let v = vec![84u32, 104u32, 101u32]; // 'T' 'h' 'e'
// Create a wide string from the vector
let res = U32CString::from_vec_with_nul(v);
assert!(res.is_err());Sourcepub unsafe fn from_vec_unchecked(v: impl Into<Vec<C>>) -> Self
pub unsafe fn from_vec_unchecked(v: impl Into<Vec<C>>) -> Self
Creates a UCString from a vector without checking for interior nul values.
A terminating nul value will be appended if the vector does not already have a terminating nul.
§Safety
This method is equivalent to new except that no runtime assertion is made that v
contains no nul values. Providing a vector with nul values will result in an invalid
UCString.
Sourcepub unsafe fn from_vec_with_nul_unchecked(v: impl Into<Vec<C>>) -> Self
pub unsafe fn from_vec_with_nul_unchecked(v: impl Into<Vec<C>>) -> Self
Creates a UCString from a vector that should have a nul terminator, without checking
for any nul values.
§Safety
This method is equivalent to from_vec_with_nul except that no runtime assertion is made
that v contains no nul values. Providing a vector with interior nul values or without a
terminating nul value will result in an invalid UCString.
Sourcepub fn from_ustr(s: impl AsRef<UStr<C>>) -> Result<Self, NulError<C>>
pub fn from_ustr(s: impl AsRef<UStr<C>>) -> Result<Self, NulError<C>>
Constructs a UCString from anything that can be converted to a UStr.
The string will be scanned for invalid nul values.
§Failures
This function will return an error if the data contains a nul value.
The returned error will contain a Vec as well as the position of the nul value.
Sourcepub unsafe fn from_ustr_unchecked(s: impl AsRef<UStr<C>>) -> Self
pub unsafe fn from_ustr_unchecked(s: impl AsRef<UStr<C>>) -> Self
Constructs a UCString from anything that can be converted to a UStr, without
scanning for invalid nul values.
§Safety
This method is equivalent to from_u16_str except that no runtime assertion is made that
s contains no nul values. Providing a string with nul values will result in an invalid
UCString.
Sourcepub fn from_ustr_with_nul(
s: impl AsRef<UStr<C>>,
) -> Result<Self, MissingNulError<C>>
pub fn from_ustr_with_nul( s: impl AsRef<UStr<C>>, ) -> Result<Self, MissingNulError<C>>
Constructs a UCString from anything that can be converted to a UStr with a nul
terminator.
The string will be truncated at the first nul value in the string.
§Failures
This function will return an error if the data does not contain a nul to terminate the
string. The returned error will contain the consumed Vec.
Sourcepub unsafe fn from_ustr_with_nul_unchecked(s: impl AsRef<UStr<C>>) -> Self
pub unsafe fn from_ustr_with_nul_unchecked(s: impl AsRef<UStr<C>>) -> Self
Constructs a UCString from anything that can be converted to a UStr with a nul
terminator, without checking the string for any invalid interior nul values.
§Safety
This method is equivalent to from_u16_str_with_nul except that no runtime assertion is
made that s contains no nul values. Providing a vector with interior nul values or
without a terminating nul value will result in an invalid UCString.
Sourcepub unsafe fn from_ptr_str(p: *const C) -> Self
pub unsafe fn from_ptr_str(p: *const C) -> Self
Constructs a new UCString copied from a nul-terminated string pointer.
This will scan for nul values beginning with p. The first nul value will be used as the
nul terminator for the string, similar to how libc string functions such as strlen work.
§Safety
This function is unsafe as there is no guarantee that the given pointer is valid or has a nul terminator, and the function could scan past the underlying buffer.
p must be non-null.
§Panics
This function panics if p is null.
§Caveat
The lifetime for the returned string is inferred from its usage. To prevent accidental misuse, it’s suggested to tie the lifetime to whichever source lifetime is safe in the context, such as by providing a helper function taking the lifetime of a host value for the string, or by explicit annotation.
Sourcepub fn into_vec(self) -> Vec<C>
pub fn into_vec(self) -> Vec<C>
Converts the wide string into a Vec without a nul terminator, consuming the string in
the process.
The resulting vector will not contain a nul-terminator, and will contain no other nul values.
Sourcepub fn into_vec_with_nul(self) -> Vec<C>
pub fn into_vec_with_nul(self) -> Vec<C>
Converts the wide string into a Vec, consuming the string in the process.
The resulting vector will contain a nul-terminator and no interior nul values.
Sourcepub fn into_raw(self) -> *mut C
pub fn into_raw(self) -> *mut C
Transfers ownership of the wide string to a C caller.
§Safety
The pointer must be returned to Rust and reconstituted using from_raw to be properly
deallocated. Specifically, one should not use the standard C free function to
deallocate this string.
Failure to call from_raw will lead to a memory leak.
Sourcepub unsafe fn from_raw(p: *mut C) -> Self
pub unsafe fn from_raw(p: *mut C) -> Self
Retakes ownership of a UCString that was transferred to C.
§Safety
This should only ever be called with a pointer that was earlier obtained by calling
into_raw on a UCString. Additionally, the length of the string will be recalculated
from the pointer.
Sourcepub fn into_boxed_ucstr(self) -> Box<UCStr<C>>
pub fn into_boxed_ucstr(self) -> Box<UCStr<C>>
Converts this UCString into a boxed UCStr.
§Examples
use widestring::{U16CString, U16CStr};
let mut v = vec![102u16, 111u16, 111u16]; // "foo"
let c_string = U16CString::new(v.clone()).unwrap();
let boxed = c_string.into_boxed_ucstr();
v.push(0);
assert_eq!(&*boxed, U16CStr::from_slice_with_nul(&v).unwrap());use widestring::{U32CString, U32CStr};
let mut v = vec![102u32, 111u32, 111u32]; // "foo"
let c_string = U32CString::new(v.clone()).unwrap();
let boxed = c_string.into_boxed_ucstr();
v.push(0);
assert_eq!(&*boxed, U32CStr::from_slice_with_nul(&v).unwrap());Source§impl UCString<u16>
impl UCString<u16>
Sourcepub fn from_str(s: impl AsRef<str>) -> Result<Self, NulError<u16>>
pub fn from_str(s: impl AsRef<str>) -> Result<Self, NulError<u16>>
Constructs a U16CString from a str.
The string will be scanned for invalid nul values.
§Failures
This function will return an error if the data contains a nul value.
The returned error will contain a Vec<u16> as well as the position of the nul value.
§Examples
use widestring::U16CString;
let s = "MyString";
// Create a wide string from the string
let wcstr = U16CString::from_str(s).unwrap();The following example demonstrates errors from nul values in a vector.
use widestring::U16CString;
let s = "My\u{0}String";
// Create a wide string from the string
let res = U16CString::from_str(s);
assert!(res.is_err());
assert_eq!(res.err().unwrap().nul_position(), 2);Sourcepub unsafe fn from_str_unchecked(s: impl AsRef<str>) -> Self
pub unsafe fn from_str_unchecked(s: impl AsRef<str>) -> Self
Constructs a U16CString from a str, without checking for interior nul values.
§Safety
This method is equivalent to from_str except that no runtime assertion is made that s
contains no nul values. Providing a string with nul values will result in an invalid
U16CString.
§Examples
use widestring::U16CString;
let s = "MyString";
// Create a wide string from the string
let wcstr = unsafe { U16CString::from_str_unchecked(s) };Sourcepub fn from_str_with_nul(
s: impl AsRef<str>,
) -> Result<Self, MissingNulError<u16>>
pub fn from_str_with_nul( s: impl AsRef<str>, ) -> Result<Self, MissingNulError<u16>>
Constructs a U16CString from a str with a nul terminator.
The string will be truncated at the first nul value in the string.
§Failures
This function will return an error if the data does not contain a nul to terminate the
string. The returned error will contain the consumed Vec<u16>.
§Examples
use widestring::U16CString;
let s = "My\u{0}String";
// Create a wide string from the string
let wcstr = U16CString::from_str_with_nul(s).unwrap();
assert_eq!(wcstr.to_string_lossy(), "My");The following example demonstrates errors from missing nul values in a vector.
use widestring::U16CString;
let s = "MyString";
// Create a wide string from the string
let res = U16CString::from_str_with_nul(s);
assert!(res.is_err());Sourcepub unsafe fn from_str_with_nul_unchecked(s: impl AsRef<str>) -> Self
pub unsafe fn from_str_with_nul_unchecked(s: impl AsRef<str>) -> Self
Constructs a U16CString from str str that should have a terminating nul, but without
checking for any nul values.
§Safety
This method is equivalent to from_str_with_nul except that no runtime assertion is made
that s contains no nul values. Providing a vector with interior nul values or without a
terminating nul value will result in an invalid U16CString.
§Examples
use widestring::U16CString;
let s = "My String\u{0}";
// Create a wide string from the string
let wcstr = unsafe { U16CString::from_str_with_nul_unchecked(s) };
assert_eq!(wcstr.to_string_lossy(), "My String");Sourcepub unsafe fn from_ptr(p: *const u16, len: usize) -> Result<Self, NulError<u16>>
pub unsafe fn from_ptr(p: *const u16, len: usize) -> Result<Self, NulError<u16>>
Constructs a new U16CString copied from a u16 pointer and a length.
The len argument is the number of u16 elements, not the number of bytes.
The string will be scanned for invalid nul values.
§Failures
This function will return an error if the data contains a nul value.
The returned error will contain a Vec<u16> as well as the position of the nul value.
§Safety
This function is unsafe as there is no guarantee that the given pointer is valid for len
elements.
§Panics
Panics if len is greater than 0 but p is a null pointer.
Sourcepub unsafe fn from_ptr_unchecked(p: *const u16, len: usize) -> Self
pub unsafe fn from_ptr_unchecked(p: *const u16, len: usize) -> Self
Constructs a new U16CString copied from a u16 pointer and a length.
The len argument is the number of u16 elements, not the number of bytes.
The string will not be checked for invalid nul values.
§Safety
This function is unsafe as there is no guarantee that the given pointer is valid for len
elements. In addition, no checking for invalid nul values is performed, so if any elements
of p are a nul value, the resulting U16CString will be invalid.
§Panics
Panics if len is greater than 0 but p is a null pointer.
Sourcepub unsafe fn from_ptr_with_nul(
p: *const u16,
len: usize,
) -> Result<Self, MissingNulError<u16>>
pub unsafe fn from_ptr_with_nul( p: *const u16, len: usize, ) -> Result<Self, MissingNulError<u16>>
Constructs a new U16String copied from a u16 pointer and a length.
The len argument is the number of u16 elements, not the number of bytes.
The string will be truncated at the first nul value in the string.
§Failures
This function will return an error if the data does not contain a nul to terminate the
string. The returned error will contain the consumed Vec<u16>.
§Safety
This function is unsafe as there is no guarantee that the given pointer is valid for len
elements.
§Panics
Panics if len is greater than 0 but p is a null pointer.
Sourcepub unsafe fn from_ptr_with_nul_unchecked(p: *const u16, len: usize) -> Self
pub unsafe fn from_ptr_with_nul_unchecked(p: *const u16, len: usize) -> Self
Constructs a new U16String copied from a u16 pointer and a length.
The len argument is the number of u16 elements, not the number of bytes.
The data should end with a nul terminator, but no checking is done on whether the data actually ends with a nul terminator, or if the data contains any interior nul values.
§Safety
This function is unsafe as there is no guarantee that the given pointer is valid for len
elements. In addition, no checking for nul values is performed, so if there data does not
end with a nul terminator, or if there are any interior nul values, the resulting
U16CString will be invalid.
§Panics
Panics if len is greater than 0 but p is a null pointer.
Sourcepub fn from_os_str(s: impl AsRef<OsStr>) -> Result<Self, NulError<u16>>
pub fn from_os_str(s: impl AsRef<OsStr>) -> Result<Self, NulError<u16>>
Constructs a U16CString from anything that can be converted to an OsStr.
The string will be scanned for invalid nul values.
§Failures
This function will return an error if the data contains a nul value.
The returned error will contain a Vec<u16> as well as the position of the nul value.
§Examples
use widestring::U16CString;
let s = "MyString";
// Create a wide string from the string
let wcstr = U16CString::from_os_str(s).unwrap();The following example demonstrates errors from nul values in a vector.
use widestring::U16CString;
let s = "My\u{0}String";
// Create a wide string from the string
let res = U16CString::from_os_str(s);
assert!(res.is_err());
assert_eq!(res.err().unwrap().nul_position(), 2);Sourcepub unsafe fn from_os_str_unchecked(s: impl AsRef<OsStr>) -> Self
pub unsafe fn from_os_str_unchecked(s: impl AsRef<OsStr>) -> Self
Constructs a U16CString from anything that can be converted to an OsStr, without
checking for interior nul values.
§Safety
This method is equivalent to from_os_str except that no runtime assertion is made that
s contains no nul values. Providing a string with nul values will result in an invalid
U16CString.
§Examples
use widestring::U16CString;
let s = "MyString";
// Create a wide string from the string
let wcstr = unsafe { U16CString::from_os_str_unchecked(s) };Sourcepub fn from_os_str_with_nul(
s: impl AsRef<OsStr>,
) -> Result<Self, MissingNulError<u16>>
pub fn from_os_str_with_nul( s: impl AsRef<OsStr>, ) -> Result<Self, MissingNulError<u16>>
Constructs a U16CString from anything that can be converted to an OsStr with a nul
terminator.
The string will be truncated at the first nul value in the string.
§Failures
This function will return an error if the data does not contain a nul to terminate the
string. The returned error will contain the consumed Vec<u16>.
§Examples
use widestring::U16CString;
let s = "My\u{0}String";
// Create a wide string from the string
let wcstr = U16CString::from_os_str_with_nul(s).unwrap();
assert_eq!(wcstr.to_string_lossy(), "My");The following example demonstrates errors from missing nul values in a vector.
use widestring::U16CString;
let s = "MyString";
// Create a wide string from the string
let res = U16CString::from_os_str_with_nul(s);
assert!(res.is_err());Sourcepub unsafe fn from_os_str_with_nul_unchecked(s: impl AsRef<OsStr>) -> Self
pub unsafe fn from_os_str_with_nul_unchecked(s: impl AsRef<OsStr>) -> Self
Constructs a U16CString from anything that can be converted to an OsStr that should
have a terminating nul, but without checking for any nul values.
§Safety
This method is equivalent to from_os_str_with_nul except that no runtime assertion is
made that s contains no nul values. Providing a vector with interior nul values or
without a terminating nul value will result in an invalid U16CString.
§Examples
use widestring::U16CString;
let s = "My String\u{0}";
// Create a wide string from the string
let wcstr = unsafe { U16CString::from_os_str_with_nul_unchecked(s) };
assert_eq!(wcstr.to_string_lossy(), "My String");Source§impl UCString<u32>
impl UCString<u32>
Sourcepub fn from_chars(v: Vec<char>) -> Result<Self, NulError<u32>>
pub fn from_chars(v: Vec<char>) -> Result<Self, NulError<u32>>
Constructs a U32CString from a container of wide character data.
This method will consume the provided data and use the underlying elements to construct a new string. The data will be scanned for invalid nul values.
§Failures
This function will return an error if the data contains a nul value.
The returned error will contain the Vec<u32> as well as the position of the nul value.
§Examples
use widestring::U32CString;
let v: Vec<char> = "Test".chars().collect();
// Create a wide string from the vector
let wcstr = U32CString::from_chars(v).unwrap();The following example demonstrates errors from nul values in a vector.
use widestring::U32CString;
let v: Vec<char> = "T\u{0}est".chars().collect();
// Create a wide string from the vector
let res = U32CString::from_chars(v);
assert!(res.is_err());
assert_eq!(res.err().unwrap().nul_position(), 1);Sourcepub fn from_chars_with_nul(v: Vec<char>) -> Result<Self, MissingNulError<u32>>
pub fn from_chars_with_nul(v: Vec<char>) -> Result<Self, MissingNulError<u32>>
Constructs a U32CString from a nul-terminated container of UTF-32 data.
This method will consume the provided data and use the underlying elements to construct a new string. The string will be truncated at the first nul value in the string.
§Failures
This function will return an error if the data does not contain a nul to terminate the
string. The returned error will contain the consumed Vec<u32>.
§Examples
use widestring::U32CString;
let v: Vec<char> = "Test\u{0}".chars().collect();
// Create a wide string from the vector
let wcstr = U32CString::from_chars_with_nul(v).unwrap();The following example demonstrates errors from missing nul values in a vector.
use widestring::U32CString;
let v: Vec<char> = "Test".chars().collect();
// Create a wide string from the vector
let res = U32CString::from_chars_with_nul(v);
assert!(res.is_err());Sourcepub unsafe fn from_chars_unchecked(v: Vec<char>) -> Self
pub unsafe fn from_chars_unchecked(v: Vec<char>) -> Self
Creates a U32CString from a vector without checking for interior nul values.
A terminating nul value will be appended if the vector does not already have a terminating nul.
§Safety
This method is equivalent to new except that no runtime assertion is made that v
contains no nul values. Providing a vector with nul values will result in an invalid
U32CString.
Sourcepub unsafe fn from_chars_with_nul_unchecked(v: Vec<char>) -> Self
pub unsafe fn from_chars_with_nul_unchecked(v: Vec<char>) -> Self
Creates a U32CString from a vector that should have a nul terminator, without checking
for any nul values.
§Safety
This method is equivalent to from_vec_with_nul except that no runtime assertion is made
that v contains no nul values. Providing a vector with interior nul values or without a
terminating nul value will result in an invalid U32CString.
Sourcepub fn from_str(s: impl AsRef<str>) -> Result<Self, NulError<u32>>
pub fn from_str(s: impl AsRef<str>) -> Result<Self, NulError<u32>>
Constructs a U32CString from a str.
The string will be scanned for invalid nul values.
§Failures
This function will return an error if the data contains a nul value.
The returned error will contain a Vec<u32> as well as the position of the nul value.
§Examples
use widestring::U32CString;
let s = "MyString";
// Create a wide string from the string
let wcstr = U32CString::from_str(s).unwrap();The following example demonstrates errors from nul values in a vector.
use widestring::U32CString;
let s = "My\u{0}String";
// Create a wide string from the string
let res = U32CString::from_str(s);
assert!(res.is_err());
assert_eq!(res.err().unwrap().nul_position(), 2);Sourcepub unsafe fn from_str_unchecked(s: impl AsRef<str>) -> Self
pub unsafe fn from_str_unchecked(s: impl AsRef<str>) -> Self
Constructs a U32CString from a str, without checking for interior nul values.
§Safety
This method is equivalent to from_str except that no runtime assertion is made that s
contains no nul values. Providing a string with nul values will result in an invalid
U32CString.
§Examples
use widestring::U32CString;
let s = "MyString";
// Create a wide string from the string
let wcstr = unsafe { U32CString::from_str_unchecked(s) };Sourcepub fn from_str_with_nul(
s: impl AsRef<str>,
) -> Result<Self, MissingNulError<u32>>
pub fn from_str_with_nul( s: impl AsRef<str>, ) -> Result<Self, MissingNulError<u32>>
Constructs a U32CString from a str with a nul terminator.
The string will be truncated at the first nul value in the string.
§Failures
This function will return an error if the data does not contain a nul to terminate the
string. The returned error will contain the consumed Vec<u32>.
§Examples
use widestring::U32CString;
let s = "My\u{0}String";
// Create a wide string from the string
let wcstr = U32CString::from_str_with_nul(s).unwrap();
assert_eq!(wcstr.to_string_lossy(), "My");The following example demonstrates errors from missing nul values in a vector.
use widestring::U32CString;
let s = "MyString";
// Create a wide string from the string
let res = U32CString::from_str_with_nul(s);
assert!(res.is_err());Sourcepub unsafe fn from_str_with_nul_unchecked(s: impl AsRef<str>) -> Self
pub unsafe fn from_str_with_nul_unchecked(s: impl AsRef<str>) -> Self
Constructs a U32CString from a str that should have a terminating nul, but without
checking for any nul values.
§Safety
This method is equivalent to from_str_with_nul except that no runtime assertion is made
that s contains no nul values. Providing a vector with interior nul values or without a
terminating nul value will result in an invalid U32CString.
§Examples
use widestring::U32CString;
let s = "My String\u{0}";
// Create a wide string from the string
let wcstr = unsafe { U32CString::from_str_with_nul_unchecked(s) };
assert_eq!(wcstr.to_string_lossy(), "My String");Sourcepub unsafe fn from_ptr(p: *const u32, len: usize) -> Result<Self, NulError<u32>>
pub unsafe fn from_ptr(p: *const u32, len: usize) -> Result<Self, NulError<u32>>
Constructs a new U32CString copied from a u32 pointer and a length.
The len argument is the number of u32 elements, not the number of bytes.
The string will be scanned for invalid nul values.
§Failures
This function will return an error if the data contains a nul value.
The returned error will contain a Vec<u32> as well as the position of the nul value.
§Safety
This function is unsafe as there is no guarantee that the given pointer is valid for len
elements.
§Panics
Panics if len is greater than 0 but p is a null pointer.
Sourcepub unsafe fn from_ptr_unchecked(p: *const u32, len: usize) -> Self
pub unsafe fn from_ptr_unchecked(p: *const u32, len: usize) -> Self
Constructs a new U32CString copied from a u32 pointer and a length.
The len argument is the number of u32 elements, not the number of bytes.
The string will not be checked for invalid nul values.
§Safety
This function is unsafe as there is no guarantee that the given pointer is valid for len
elements. In addition, no checking for invalid nul values is performed, so if any elements
of p are a nul value, the resulting U16CString will be invalid.
§Panics
Panics if len is greater than 0 but p is a null pointer.
Sourcepub unsafe fn from_ptr_with_nul(
p: *const u32,
len: usize,
) -> Result<Self, MissingNulError<u32>>
pub unsafe fn from_ptr_with_nul( p: *const u32, len: usize, ) -> Result<Self, MissingNulError<u32>>
Constructs a new U32String copied from a u32 pointer and a length.
The len argument is the number of u32 elements, not the number of bytes.
The string will be truncated at the first nul value in the string.
§Failures
This function will return an error if the data does not contain a nul to terminate the
string. The returned error will contain the consumed Vec<u32>.
§Safety
This function is unsafe as there is no guarantee that the given pointer is valid for len
elements.
§Panics
Panics if len is greater than 0 but p is a null pointer.
Sourcepub unsafe fn from_ptr_with_nul_unchecked(p: *const u32, len: usize) -> Self
pub unsafe fn from_ptr_with_nul_unchecked(p: *const u32, len: usize) -> Self
Constructs a new U32String copied from a u32 pointer and a length.
The len argument is the number of u32 elements, not the number of bytes.
The data should end with a nul terminator, but no checking is done on whether the data actually ends with a nul terminator, or if the data contains any interior nul values.
§Safety
This function is unsafe as there is no guarantee that the given pointer is valid for len
elements. In addition, no checking for nul values is performed, so if there data does not
end with a nul terminator, or if there are any interior nul values, the resulting
U32CString will be invalid.
§Panics
Panics if len is greater than 0 but p is a null pointer.
Sourcepub unsafe fn from_char_ptr(
p: *const char,
len: usize,
) -> Result<Self, NulError<u32>>
pub unsafe fn from_char_ptr( p: *const char, len: usize, ) -> Result<Self, NulError<u32>>
Constructs a new U32CString copied from a char pointer and a length.
The len argument is the number of char elements, not the number of bytes.
The string will be scanned for invalid nul values.
§Failures
This function will return an error if the data contains a nul value.
The returned error will contain a Vec<u32> as well as the position of the nul value.
§Safety
This function is unsafe as there is no guarantee that the given pointer is valid for len
elements.
§Panics
Panics if len is greater than 0 but p is a null pointer.
Sourcepub unsafe fn from_char_ptr_unchecked(p: *const char, len: usize) -> Self
pub unsafe fn from_char_ptr_unchecked(p: *const char, len: usize) -> Self
Constructs a new U32CString copied from a char pointer and a length.
The len argument is the number of char elements, not the number of bytes.
The string will not be checked for invalid nul values.
§Safety
This function is unsafe as there is no guarantee that the given pointer is valid for len
elements. In addition, no checking for invalid nul values is performed, so if any elements
of p are a nul value, the resulting U32CString will be invalid.
§Panics
Panics if len is greater than 0 but p is a null pointer.
Sourcepub unsafe fn from_char_ptr_with_nul(
p: *const char,
len: usize,
) -> Result<Self, MissingNulError<u32>>
pub unsafe fn from_char_ptr_with_nul( p: *const char, len: usize, ) -> Result<Self, MissingNulError<u32>>
Constructs a new U32String copied from a char pointer and a length.
The len argument is the number of char elements, not the number of bytes.
The string will be truncated at the first nul value in the string.
§Failures
This function will return an error if the data does not contain a nul to terminate the
string. The returned error will contain the consumed Vec<u32>.
§Safety
This function is unsafe as there is no guarantee that the given pointer is valid for len
elements.
§Panics
Panics if len is greater than 0 but p is a null pointer.
Sourcepub unsafe fn from_char_ptr_with_nul_unchecked(
p: *const char,
len: usize,
) -> Self
pub unsafe fn from_char_ptr_with_nul_unchecked( p: *const char, len: usize, ) -> Self
Constructs a new U32String copied from a char pointer and a length.
The len argument is the number of char elements, not the number of bytes.
The data should end with a nul terminator, but no checking is done on whether the data actually ends with a nul terminator, or if the data contains any interior nul values.
§Safety
This function is unsafe as there is no guarantee that the given pointer is valid for len
elements. In addition, no checking for nul values is performed, so if there data does not
end with a nul terminator, or if there are any interior nul values, the resulting
U32CString will be invalid.
§Panics
Panics if len is greater than 0 but p is a null pointer.
Sourcepub fn from_os_str(s: impl AsRef<OsStr>) -> Result<Self, NulError<u32>>
pub fn from_os_str(s: impl AsRef<OsStr>) -> Result<Self, NulError<u32>>
Constructs a U32CString from anything that can be converted to an OsStr.
The string will be scanned for invalid nul values.
§Failures
This function will return an error if the data contains a nul value.
The returned error will contain a Vec<u16> as well as the position of the nul value.
§Examples
use widestring::U32CString;
let s = "MyString";
// Create a wide string from the string
let wcstr = U32CString::from_os_str(s).unwrap();The following example demonstrates errors from nul values in a vector.
use widestring::U32CString;
let s = "My\u{0}String";
// Create a wide string from the string
let res = U32CString::from_os_str(s);
assert!(res.is_err());
assert_eq!(res.err().unwrap().nul_position(), 2);Sourcepub unsafe fn from_os_str_unchecked(s: impl AsRef<OsStr>) -> Self
pub unsafe fn from_os_str_unchecked(s: impl AsRef<OsStr>) -> Self
Constructs a U32CString from anything that can be converted to an OsStr, without
checking for interior nul values.
§Safety
This method is equivalent to from_os_str except that no runtime assertion is made that
s contains no nul values. Providing a string with nul values will result in an invalid
U32CString.
§Examples
use widestring::U32CString;
let s = "MyString";
// Create a wide string from the string
let wcstr = unsafe { U32CString::from_os_str_unchecked(s) };Sourcepub fn from_os_str_with_nul(
s: impl AsRef<OsStr>,
) -> Result<Self, MissingNulError<u32>>
pub fn from_os_str_with_nul( s: impl AsRef<OsStr>, ) -> Result<Self, MissingNulError<u32>>
Constructs a U32CString from anything that can be converted to an OsStr with a nul
terminator.
The string will be truncated at the first nul value in the string.
§Failures
This function will return an error if the data does not contain a nul to terminate the
string. The returned error will contain the consumed Vec<u16>.
§Examples
use widestring::U32CString;
let s = "My\u{0}String";
// Create a wide string from the string
let wcstr = U32CString::from_os_str_with_nul(s).unwrap();
assert_eq!(wcstr.to_string_lossy(), "My");The following example demonstrates errors from missing nul values in a vector.
use widestring::U32CString;
let s = "MyString";
// Create a wide string from the string
let res = U32CString::from_os_str_with_nul(s);
assert!(res.is_err());Sourcepub unsafe fn from_os_str_with_nul_unchecked(s: impl AsRef<OsStr>) -> Self
pub unsafe fn from_os_str_with_nul_unchecked(s: impl AsRef<OsStr>) -> Self
Constructs a U32CString from anything that can be converted to an OsStr that should
have a terminating nul, but without checking for any nul values.
§Safety
This method is equivalent to from_os_str_with_nul except that no runtime assertion is
made that s contains no nul values. Providing a vector with interior nul values or
without a terminating nul value will result in an invalid U32CString.
§Examples
use widestring::U32CString;
let s = "My String\u{0}";
// Create a wide string from the string
let wcstr = unsafe { U32CString::from_os_str_with_nul_unchecked(s) };
assert_eq!(wcstr.to_string_lossy(), "My String");Methods from Deref<Target = UCStr<C>>§
Sourcepub fn to_ucstring(&self) -> UCString<C>
pub fn to_ucstring(&self) -> UCString<C>
Copies the wide string to an new owned UString.
Sourcepub fn to_ustring(&self) -> UString<C>
pub fn to_ustring(&self) -> UString<C>
Copies the wide string to a new owned UString.
The UString will not have a nul terminator.
§Examples
use widestring::U16CString;
let wcstr = U16CString::from_str("MyString").unwrap();
// Convert U16CString to a U16String
let wstr = wcstr.to_ustring();
// U16CString will have a terminating nul
let wcvec = wcstr.into_vec_with_nul();
assert_eq!(wcvec[wcvec.len()-1], 0);
// The resulting U16String will not have the terminating nul
let wvec = wstr.into_vec();
assert_ne!(wvec[wvec.len()-1], 0);use widestring::U32CString;
let wcstr = U32CString::from_str("MyString").unwrap();
// Convert U32CString to a U32String
let wstr = wcstr.to_ustring();
// U32CString will have a terminating nul
let wcvec = wcstr.into_vec_with_nul();
assert_eq!(wcvec[wcvec.len()-1], 0);
// The resulting U32String will not have the terminating nul
let wvec = wstr.into_vec();
assert_ne!(wvec[wvec.len()-1], 0);Sourcepub fn as_slice(&self) -> &[C]
pub fn as_slice(&self) -> &[C]
Converts to a slice of the wide string.
The slice will not include the nul terminator.
Sourcepub fn as_slice_with_nul(&self) -> &[C]
pub fn as_slice_with_nul(&self) -> &[C]
Converts to a slice of the wide string, including the nul terminator.
Sourcepub fn as_ptr(&self) -> *const C
pub fn as_ptr(&self) -> *const C
Returns a raw pointer to the wide string.
The pointer is valid only as long as the lifetime of this reference.