[][src]Struct utfx::UString

#[repr(transparent)]pub struct UString<C: UChar> { /* fields omitted */ }

An owned, mutable "wide" string for FFI that is not nul-aware.

UString is not aware of nul values. Strings may or may not be nul-terminated, and may contain invalid and ill-formed UTF-16 or UTF-32 data. These strings are intended to be used with FFI functions that directly use string length, where the strings are known to have proper nul-termination already, or where strings are merely being passed through without modification.

UCString should be used instead if nul-aware strings are required.

UString can be converted to and from many other standard Rust string types, including OsString and String, making proper Unicode FFI safe and easy.

Please prefer using the type aliases U16String or U32String or WideString to using this type directly.

Examples

The following example constructs a U16String and shows how to convert a U16String to a regular Rust String.

use widestring::U16String;
let s = "Test";
// Create a wide string from the rust string
let wstr = U16String::from_str(s);
// Convert back to a rust string
let rust_str = wstr.to_string_lossy();
assert_eq!(rust_str, "Test");

The same example using U32String instead:

use widestring::U32String;
let s = "Test";
// Create a wide string from the rust string
let wstr = U32String::from_str(s);
// Convert back to a rust string
let rust_str = wstr.to_string_lossy();
assert_eq!(rust_str, "Test");

Implementations

impl<C: UChar> UString<C>[src]

pub fn new() -> Self[src]

Constructs a new empty UString.

pub fn from_vec(raw: impl Into<Vec<C>>) -> Self[src]

Constructs a UString from a vector of possibly invalid or ill-formed UTF-16 or UTF-32 data.

No checks are made on the contents of the vector.

Examples

use widestring::U16String;
let v = vec![84u16, 104u16, 101u16]; // 'T' 'h' 'e'
// Create a wide string from the vector
let wstr = U16String::from_vec(v);
use widestring::U32String;
let v = vec![84u32, 104u32, 101u32]; // 'T' 'h' 'e'
// Create a wide string from the vector
let wstr = U32String::from_vec(v);

pub unsafe fn from_ptr(p: *const C, len: usize) -> Self[src]

Constructs a UString from a pointer and a length.

The len argument is the number of elements, not the number of bytes.

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.

pub fn with_capacity(capacity: usize) -> Self[src]

Creates a UString with the given capacity.

The string will be able to hold exactly capacity partial code units without reallocating. If capacity is set to 0, the string will not initially allocate.

pub fn capacity(&self) -> usize[src]

Returns the capacity this UString can hold without reallocating.

pub fn clear(&mut self)[src]

Truncate the UString to zero length.

pub fn reserve(&mut self, additional: usize)[src]

Reserves the capacity for at least additional more capacity to be inserted in the given UString.

More space may be reserved to avoid frequent allocations.

pub fn reserve_exact(&mut self, additional: usize)[src]

Reserves the minimum capacity for exactly additional more capacity to be inserted in the given UString. Does nothing if the capcity is already sufficient.

Note that the allocator may give more space than is requested. Therefore capacity can not be relied upon to be precisely minimal. Prefer reserve if future insertions are expected.

pub fn into_vec(self) -> Vec<C>[src]

Converts the wide string into a Vec, consuming the string in the process.

pub fn as_ustr(&self) -> &UStr<C>[src]

Converts to a UStr reference.

pub fn push(&mut self, s: impl AsRef<UStr<C>>)[src]

Extends the wide string with the given &UStr.

No checks are performed on the strings. It is possible to end up nul values inside the string, and it is up to the caller to determine if that is acceptable.

Examples

use widestring::U16String;
let s = "MyString";
let mut wstr = U16String::from_str(s);
let cloned = wstr.clone();
// Push the clone to the end, repeating the string twice.
wstr.push(cloned);

assert_eq!(wstr.to_string().unwrap(), "MyStringMyString");
use widestring::U32String;
let s = "MyString";
let mut wstr = U32String::from_str(s);
let cloned = wstr.clone();
// Push the clone to the end, repeating the string twice.
wstr.push(cloned);

assert_eq!(wstr.to_string().unwrap(), "MyStringMyString");

pub fn push_slice(&mut self, s: impl AsRef<[C]>)[src]

Extends the wide string with the given slice.

No checks are performed on the strings. It is possible to end up nul values inside the string, and it is up to the caller to determine if that is acceptable.

Examples

use widestring::U16String;
let s = "MyString";
let mut wstr = U16String::from_str(s);
let cloned = wstr.clone();
// Push the clone to the end, repeating the string twice.
wstr.push_slice(cloned);

assert_eq!(wstr.to_string().unwrap(), "MyStringMyString");
use widestring::U32String;
let s = "MyString";
let mut wstr = U32String::from_str(s);
let cloned = wstr.clone();
// Push the clone to the end, repeating the string twice.
wstr.push_slice(cloned);

assert_eq!(wstr.to_string().unwrap(), "MyStringMyString");

pub fn shrink_to_fit(&mut self)[src]

Shrinks the capacity of the UString to match its length.

Examples

use widestring::U16String;

let mut s = U16String::from_str("foo");

s.reserve(100);
assert!(s.capacity() >= 100);

s.shrink_to_fit();
assert_eq!(3, s.capacity());
use widestring::U32String;

let mut s = U32String::from_str("foo");

s.reserve(100);
assert!(s.capacity() >= 100);

s.shrink_to_fit();
assert_eq!(3, s.capacity());

pub fn into_boxed_ustr(self) -> Box<UStr<C>>[src]

Converts this UString into a boxed UStr.

Examples

use widestring::{U16String, U16Str};

let s = U16String::from_str("hello");

let b: Box<U16Str> = s.into_boxed_ustr();
use widestring::{U32String, U32Str};

let s = U32String::from_str("hello");

let b: Box<U32Str> = s.into_boxed_ustr();

impl UString<u16>[src]

pub fn from_str<S: AsRef<str> + ?Sized>(s: &S) -> Self[src]

Encodes a U16String copy from a str.

This makes a wide string copy of the str. Since str will always be valid UTF-8, the resulting U16String will also be valid UTF-16.

Examples

use widestring::U16String;
let s = "MyString";
// Create a wide string from the string
let wstr = U16String::from_str(s);

assert_eq!(wstr.to_string().unwrap(), s);

pub fn from_os_str<S: AsRef<OsStr> + ?Sized>(s: &S) -> Self[src]

Encodes a U16String copy from an OsStr.

This makes a wide string copy of the OsStr. Since OsStr makes no guarantees that it is valid data, there is no guarantee that the resulting U16String will be valid UTF-16.

Examples

use widestring::U16String;
let s = "MyString";
// Create a wide string from the string
let wstr = U16String::from_os_str(s);

assert_eq!(wstr.to_string().unwrap(), s);

pub fn push_str(&mut self, s: impl AsRef<str>)[src]

Extends the string with the given &str.

No checks are performed on the strings. It is possible to end up nul values inside the string, and it is up to the caller to determine if that is acceptable.

Examples

use widestring::U16String;
let s = "MyString";
let mut wstr = U16String::from_str(s);
// Push the original to the end, repeating the string twice.
wstr.push_str(s);

assert_eq!(wstr.to_string().unwrap(), "MyStringMyString");

pub fn push_os_str(&mut self, s: impl AsRef<OsStr>)[src]

Extends the string with the given &OsStr.

No checks are performed on the strings. It is possible to end up nul values inside the string, and it is up to the caller to determine if that is acceptable.

Examples

use widestring::U16String;
let s = "MyString";
let mut wstr = U16String::from_str(s);
// Push the original to the end, repeating the string twice.
wstr.push_os_str(s);

assert_eq!(wstr.to_string().unwrap(), "MyStringMyString");

impl UString<u32>[src]

pub fn from_chars(raw: Vec<char>) -> Self[src]

Constructs a U32String from a vector of UTF-32 data.

No checks are made on the contents of the vector.

Examples

use widestring::U32String;
let v: Vec<char> = "Test".chars().collect();
// Create a wide string from the vector
let wstr = U32String::from_chars(v);

pub fn from_str<S: AsRef<str> + ?Sized>(s: &S) -> Self[src]

Encodes a U32String copy from a str.

This makes a wide string copy of the str. Since str will always be valid UTF-8, the resulting U32String will also be valid UTF-32.

Examples

use widestring::U32String;
let s = "MyString";
// Create a wide string from the string
let wstr = U32String::from_str(s);

assert_eq!(wstr.to_string().unwrap(), s);

pub fn from_os_str<S: AsRef<OsStr> + ?Sized>(s: &S) -> Self[src]

Encodes a U32String copy from an OsStr.

This makes a wide string copy of the OsStr. Since OsStr makes no guarantees that it is valid data, there is no guarantee that the resulting U32String will be valid UTF-32.

Examples

use widestring::U32String;
let s = "MyString";
// Create a wide string from the string
let wstr = U32String::from_os_str(s);

assert_eq!(wstr.to_string().unwrap(), s);

pub unsafe fn from_char_ptr(p: *const char, len: usize) -> Self[src]

Constructs a U32String from a char pointer and a length.

The len argument is the number of char elements, not the number of bytes.

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.

pub fn push_str(&mut self, s: impl AsRef<str>)[src]

Extends the string with the given &str.

No checks are performed on the strings. It is possible to end up nul values inside the string, and it is up to the caller to determine if that is acceptable.

Examples

use widestring::U32String;
let s = "MyString";
let mut wstr = U32String::from_str(s);
// Push the original to the end, repeating the string twice.
wstr.push_str(s);

assert_eq!(wstr.to_string().unwrap(), "MyStringMyString");

pub fn push_os_str(&mut self, s: impl AsRef<OsStr>)[src]

Extends the string with the given &OsStr.

No checks are performed on the strings. It is possible to end up nul values inside the string, and it is up to the caller to determine if that is acceptable.

Examples

use widestring::U32String;
let s = "MyString";
let mut wstr = U32String::from_str(s);
// Push the original to the end, repeating the string twice.
wstr.push_os_str(s);

assert_eq!(wstr.to_string().unwrap(), "MyStringMyString");

Methods from Deref<Target = UStr<C>>

pub fn to_ustring(&self) -> UString<C>[src]

Copies the wide string to a new owned UString.

pub fn as_slice(&self) -> &[C][src]

Converts to a slice of the wide string.

pub fn as_ptr(&self) -> *const C[src]

Returns a raw pointer to the wide string.

The pointer is valid only as long as the lifetime of this reference.

pub fn len(&self) -> usize[src]

Returns the length of the wide string as number of elements (not number of bytes).

pub fn is_empty(&self) -> bool[src]

Returns whether this wide string contains no data.

pub fn to_os_string(&self) -> OsString[src]

Decodes a wide string to an owned OsString.

This makes a string copy of the U16Str. Since U16Str makes no guarantees that it is valid UTF-16, there is no guarantee that the resulting OsString will be valid data.

Examples

use widestring::U16String;
use std::ffi::OsString;
let s = "MyString";
// Create a wide string from the string
let wstr = U16String::from_str(s);
// Create an OsString from the wide string
let osstr = wstr.to_os_string();

assert_eq!(osstr, OsString::from(s));

pub fn to_string(&self) -> Result<String, FromUtf16Error>[src]

Copies the wide string to a String if it contains valid UTF-16 data.

Failures

Returns an error if the string contains any invalid UTF-16 data.

Examples

use widestring::U16String;
let s = "MyString";
// Create a wide string from the string
let wstr = U16String::from_str(s);
// Create a regular string from the wide string
let s2 = wstr.to_string().unwrap();

assert_eq!(s2, s);

pub fn to_string_lossy(&self) -> String[src]

Copies the wide string to a String.

Any non-Unicode sequences are replaced with U+FFFD REPLACEMENT CHARACTER.

Examples

use widestring::U16String;
let s = "MyString";
// Create a wide string from the string
let wstr = U16String::from_str(s);
// Create a regular string from the wide string
let lossy = wstr.to_string_lossy();

assert_eq!(lossy, s);

pub fn to_os_string(&self) -> OsString[src]

Decodes a wide string to an owned OsString.

This makes a string copy of the U32Str. Since U32Str makes no guarantees that it is valid UTF-32, there is no guarantee that the resulting OsString will be valid data.

Examples

use widestring::U32String;
use std::ffi::OsString;
let s = "MyString";
// Create a wide string from the string
let wstr = U32String::from_str(s);
// Create an OsString from the wide string
let osstr = wstr.to_os_string();

assert_eq!(osstr, OsString::from(s));

pub fn to_string(&self) -> Result<String, FromUtf32Error>[src]

Copies the wide string to a String if it contains valid UTF-32 data.

Failures

Returns an error if the string contains any invalid UTF-32 data.

Examples

use widestring::U32String;
let s = "MyString";
// Create a wide string from the string
let wstr = U32String::from_str(s);
// Create a regular string from the wide string
let s2 = wstr.to_string().unwrap();

assert_eq!(s2, s);

pub fn to_string_lossy(&self) -> String[src]

Copies the wide string to a String.

Any non-Unicode sequences are replaced with U+FFFD REPLACEMENT CHARACTER.

Examples

use widestring::U32String;
let s = "MyString";
// Create a wide string from the string
let wstr = U32String::from_str(s);
// Create a regular string from the wide string
let lossy = wstr.to_string_lossy();

assert_eq!(lossy, s);

Trait Implementations

impl<C: UChar> AsRef<[C]> for UString<C>[src]

impl<C: UChar> AsRef<UStr<C>> for UString<C>[src]

impl<C: UChar> Borrow<UStr<C>> for UString<C>[src]

impl<C: Clone + UChar> Clone for UString<C>[src]

impl<C: Debug + UChar> Debug for UString<C>[src]

impl<C: Default + UChar> Default for UString<C>[src]

impl<C: UChar> Deref for UString<C>[src]

type Target = UStr<C>

The resulting type after dereferencing.

impl<C: Eq + UChar> Eq for UString<C>[src]

impl<'_> From<&'_ String> for UString<u16>[src]

impl<'_> From<&'_ String> for UString<u32>[src]

impl<'_> From<&'_ str> for UString<u16>[src]

impl<'_> From<&'_ str> for UString<u32>[src]

impl<'a, C: UChar, T: ?Sized + AsRef<UStr<C>>> From<&'a T> for UString<C>[src]

impl<C: UChar> From<Box<UStr<C>>> for UString<C>[src]

impl From<OsString> for UString<u16>[src]

impl From<OsString> for UString<u32>[src]

impl From<String> for UString<u16>[src]

impl From<String> for UString<u32>[src]

impl<C: UChar> From<UCString<C>> for UString<C>[src]

impl<C: UChar> From<UString<C>> for Box<UStr<C>>[src]

impl<'a> From<UString<u16>> for Cow<'a, UStr<u16>>[src]

impl From<UString<u16>> for OsString[src]

impl<'a> From<UString<u32>> for Cow<'a, UStr<u32>>[src]

impl From<UString<u32>> for OsString[src]

impl FromStr for UString<u16>[src]

type Err = Infallible

The associated error which can be returned from parsing.

impl FromStr for UString<u32>[src]

type Err = Infallible

The associated error which can be returned from parsing.

impl<C: Hash + UChar> Hash for UString<C>[src]

impl<C: UChar> Index<RangeFull> for UString<C>[src]

type Output = UStr<C>

The returned type after indexing.

impl Into<UString<u16>> for Vec<u16>[src]

impl Into<UString<u32>> for Vec<u32>[src]

impl Into<UString<u32>> for Vec<char>[src]

impl<C: UChar> Into<Vec<C>> for UString<C>[src]

impl<C: Ord + UChar> Ord for UString<C>[src]

impl<'a, C: UChar> PartialEq<&'a UStr<C>> for UString<C>[src]

impl<'a, C: UChar> PartialEq<Cow<'a, UStr<C>>> for UString<C>[src]

impl<C: UChar> PartialEq<UStr<C>> for UString<C>[src]

impl<C: PartialEq + UChar> PartialEq<UString<C>> for UString<C>[src]

impl<'a, C: UChar> PartialOrd<&'a UStr<C>> for UString<C>[src]

impl<'a, C: UChar> PartialOrd<Cow<'a, UStr<C>>> for UString<C>[src]

impl<C: UChar> PartialOrd<UStr<C>> for UString<C>[src]

impl<C: PartialOrd + UChar> PartialOrd<UString<C>> for UString<C>[src]

impl<C: UChar> StructuralEq for UString<C>[src]

impl<C: UChar> StructuralPartialEq for UString<C>[src]

Auto Trait Implementations

impl<C> RefUnwindSafe for UString<C> where
    C: RefUnwindSafe

impl<C> Send for UString<C> where
    C: Send

impl<C> Sync for UString<C> where
    C: Sync

impl<C> Unpin for UString<C> where
    C: Unpin

impl<C> UnwindSafe for UString<C> where
    C: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.