pub struct Utf16Str { /* private fields */ }
Expand description

UTF-16 string slice for Utf16String.

Utf16Str is to Utf16String as str is to String.

Utf16Str slices are string slices that are always valid UTF-16 encoding. This is unlike the U16Str string slices, which may not have valid encoding. In this way, Utf16Str string slices most resemble native str slices of all the types in this crate.

Examples

The easiest way to use Utf16Str is with the utf16str! macro to convert string literals into string slices at compile time:

use widestring::utf16str;
let hello = utf16str!("Hello, world!");

You can also convert a u16 slice directly, provided it is valid UTF-16:

use widestring::Utf16Str;

let sparkle_heart = [0xd83d, 0xdc96];
let sparkle_heart = Utf16Str::from_slice(&sparkle_heart).unwrap();

assert_eq!("💖", sparkle_heart);

Implementations

Converts a slice to a string slice without checking that the string contains valid UTF-16.

See the safe version, from_slice, for more information.

Safety

This function is unsafe because it does not check that the slice passed to it is valid UTF-16. If this constraint is violated, undefined behavior results as it is assumed the Utf16Str is always valid UTF-16.

Examples
use widestring::Utf16Str;

let sparkle_heart = vec![0xd83d, 0xdc96]; // Raw surrogate pair
let sparkle_heart = unsafe { Utf16Str::from_slice_unchecked(&sparkle_heart) };

assert_eq!("💖", sparkle_heart);

Converts a mutable slice to a mutable string slice without checking that the string contains valid UTF-16.

See the safe version, from_slice_mut, for more information.

Safety

This function is unsafe because it does not check that the slice passed to it is valid UTF-16. If this constraint is violated, undefined behavior results as it is assumed the Utf16Str is always valid UTF-16.

Examples
use widestring::Utf16Str;

let mut sparkle_heart = vec![0xd83d, 0xdc96]; // Raw surrogate pair
let sparkle_heart = unsafe { Utf16Str::from_slice_unchecked_mut(&mut sparkle_heart) };

assert_eq!("💖", sparkle_heart);

Converts a boxed slice to a boxed string slice without checking that the string contains valid UTF-16.

Safety

This function is unsafe because it does not check if the string slice is valid UTF-16, and Utf16Str must always be valid UTF-16.

Returns an unchecked subslice of this string slice.

This is the unchecked alternative to indexing the string slice.

Safety

Callers of this function are responsible that these preconditions are satisfied:

  • The starting index must not exceed the ending index;
  • Indexes must be within bounds of the original slice;
  • Indexes must lie on UTF-16 sequence boundaries.

Failing that, the returned string slice may reference invalid memory or violate the invariants communicated by the type.

Examples
let v = utf16str!("⚧️🏳️‍⚧️➡️s");
unsafe {
    assert_eq!(utf16str!("⚧️"), v.get_unchecked(..2));
    assert_eq!(utf16str!("🏳️‍⚧️"), v.get_unchecked(2..8));
    assert_eq!(utf16str!("➡️"), v.get_unchecked(8..10));
    assert_eq!(utf16str!("s"), v.get_unchecked(10..));
}

Returns a mutable, unchecked subslice of this string slice

This is the unchecked alternative to indexing the string slice.

Safety

Callers of this function are responsible that these preconditions are satisfied:

  • The starting index must not exceed the ending index;
  • Indexes must be within bounds of the original slice;
  • Indexes must lie on UTF-16 sequence boundaries.

Failing that, the returned string slice may reference invalid memory or violate the invariants communicated by the type.

Examples
let mut v = utf16str!("⚧️🏳️‍⚧️➡️s").to_owned();
unsafe {
    assert_eq!(utf16str!("⚧️"), v.get_unchecked_mut(..2));
    assert_eq!(utf16str!("🏳️‍⚧️"), v.get_unchecked_mut(2..8));
    assert_eq!(utf16str!("➡️"), v.get_unchecked_mut(8..10));
    assert_eq!(utf16str!("s"), v.get_unchecked_mut(10..));
}

Returns the length of self.

This length is in u16 values, not chars or graphemes. In other words, it may not be what human considers the length of the string.

Examples
assert_eq!(utf16str!("foo").len(), 3);

let complex = utf16str!("⚧️🏳️‍⚧️➡️s");
assert_eq!(complex.len(), 11);
assert_eq!(complex.chars().count(), 10);

Returns true if the string has a length of zero.

Converts a string to a slice of its underlying elements.

To convert the slice back into a string slice, use the from_slice function.

Converts a mutable string to a mutable slice of its underlying elements.

Safety

This function is unsafe because you can violate the invariants of this type when mutating the slice. The caller must ensure that the contents of the slice is valid UTF before the borrow ends and the underlying string is used.

Use of this string type whose contents have been mutated to invalid UTF is undefined behavior.

Converts a string slice to a raw pointer.

This pointer will be pointing to the first element of the string slice.

The caller must ensure that the returned pointer is never written to. If you need to mutate the contents of the string slice, use as_mut_ptr.

Converts a mutable string slice to a mutable pointer.

This pointer will be pointing to the first element of the string slice.

Returns this string as a wide string slice of undefined encoding.

Returns a string slice with leading and trailing whitespace removed.

‘Whitespace’ is defined according to the terms of the Unicode Derived Core Property White_Space.

Returns a string slice with leading whitespace removed.

‘Whitespace’ is defined according to the terms of the Unicode Derived Core Property White_Space.

Text directionality

A string is a sequence of elements. start in this context means the first position of that sequence; for a left-to-right language like English or Russian, this will be left side, and for right-to-left languages like Arabic or Hebrew, this will be the right side.

Returns a string slice with trailing whitespace removed.

‘Whitespace’ is defined according to the terms of the Unicode Derived Core Property White_Space.

Text directionality

A string is a sequence of elements. end in this context means the last position of that sequence; for a left-to-right language like English or Russian, this will be right side, and for right-to-left languages like Arabic or Hebrew, this will be the left side.

Converts a boxed string into a boxed slice without copying or allocating.

Converts a boxed string slice into an owned UTF string without copying or allocating.

Creates a new owned string by repeating this string n times.

Panics

This function will panic if the capacity would overflow.

Converts a slice of UTF-16 data to a string slice.

Not all slices of u16 values are valid to convert, since Utf16Str requires that it is always valid UTF-16. This function checks to ensure that the values are valid UTF-16, and then does the conversion.

If you are sure that the slice is valid UTF-16, and you don’t want to incur the overhead of the validity check, there is an unsafe version of this function, from_slice_unchecked, which has the same behavior but skips the check.

If you need an owned string, consider using Utf16String::from_vec instead.

Because you can stack-allocate a [u16; N], this function is one way to have a stack-allocated string. Indeed, the utf16str! macro does exactly this after converting from UTF-8 to UTF-16.

Errors

Returns an error if the slice is not UTF-16 with a description as to why the provided slice is not UTF-16.

Examples
use widestring::Utf16Str;

let sparkle_heart = vec![0xd83d, 0xdc96]; // Raw surrogate pair
let sparkle_heart = Utf16Str::from_slice(&sparkle_heart).unwrap();

assert_eq!("💖", sparkle_heart);

With incorrect values that return an error:

use widestring::Utf16Str;

let sparkle_heart = vec![0xd83d, 0x0]; // This is an invalid unpaired surrogate

assert!(Utf16Str::from_slice(&sparkle_heart).is_err());

Converts a mutable slice of UTF-16 data to a mutable string slice.

Not all slices of u16 values are valid to convert, since Utf16Str requires that it is always valid UTF-16. This function checks to ensure that the values are valid UTF-16, and then does the conversion.

If you are sure that the slice is valid UTF-16, and you don’t want to incur the overhead of the validity check, there is an unsafe version of this function, from_slice_unchecked_mut, which has the same behavior but skips the check.

If you need an owned string, consider using Utf16String::from_vec instead.

Because you can stack-allocate a [u16; N], this function is one way to have a stack-allocated string. Indeed, the utf16str! macro does exactly this after converting from UTF-8 to UTF-16.

Errors

Returns an error if the slice is not UTF-16 with a description as to why the provided slice is not UTF-16.

Examples
use widestring::Utf16Str;

let mut sparkle_heart = vec![0xd83d, 0xdc96]; // Raw surrogate pair
let sparkle_heart = Utf16Str::from_slice_mut(&mut sparkle_heart).unwrap();

assert_eq!("💖", sparkle_heart);

With incorrect values that return an error:

use widestring::Utf16Str;

let mut sparkle_heart = vec![0xd83d, 0x0]; // This is an invalid unpaired surrogate

assert!(Utf16Str::from_slice_mut(&mut sparkle_heart).is_err());

Converts a wide string slice of undefined encoding to a UTF-16 string slice without checking if the string slice is valid UTF-16.

See the safe version, from_ustr, for more information.

Safety

This function is unsafe because it does not check that the string slice passed to it is valid UTF-16. If this constraint is violated, undefined behavior results as it is assumed the Utf16Str is always valid UTF-16.

Examples
use widestring::{Utf16Str, u16str};

let sparkle_heart = u16str!("💖");
let sparkle_heart = unsafe { Utf16Str::from_ustr_unchecked(sparkle_heart) };

assert_eq!("💖", sparkle_heart);

Converts a mutable wide string slice of undefined encoding to a mutable UTF-16 string slice without checking if the string slice is valid UTF-16.

See the safe version, from_ustr_mut, for more information.

Safety

This function is unsafe because it does not check that the string slice passed to it is valid UTF-16. If this constraint is violated, undefined behavior results as it is assumed the Utf16Str is always valid UTF-16.

Converts a wide string slice of undefined encoding to a UTF-16 string slice.

Since U16Str does not have a specified encoding, this conversion may fail if the U16Str does not contain valid UTF-16 data.

If you are sure that the slice is valid UTF-16, and you don’t want to incur the overhead of the validity check, there is an unsafe version of this function, from_ustr_unchecked, which has the same behavior but skips the check.

Errors

Returns an error if the string slice is not UTF-16 with a description as to why the provided string slice is not UTF-16.

Examples
use widestring::{Utf16Str, u16str};

let sparkle_heart = u16str!("💖");
let sparkle_heart = Utf16Str::from_ustr(sparkle_heart).unwrap();

assert_eq!("💖", sparkle_heart);

Converts a mutable wide string slice of undefined encoding to a mutable UTF-16 string slice.

Since U16Str does not have a specified encoding, this conversion may fail if the U16Str does not contain valid UTF-16 data.

If you are sure that the slice is valid UTF-16, and you don’t want to incur the overhead of the validity check, there is an unsafe version of this function, from_ustr_unchecked_mut, which has the same behavior but skips the check.

Errors

Returns an error if the string slice is not UTF-16 with a description as to why the provided string slice is not UTF-16.

Converts a wide C string slice to a UTF-16 string slice without checking if the string slice is valid UTF-16.

The resulting string slice does not contain the nul terminator.

See the safe version, from_ucstr, for more information.

Safety

This function is unsafe because it does not check that the string slice passed to it is valid UTF-16. If this constraint is violated, undefined behavior results as it is assumed the Utf16Str is always valid UTF-16.

Examples
use widestring::{Utf16Str, u16cstr};

let sparkle_heart = u16cstr!("💖");
let sparkle_heart = unsafe { Utf16Str::from_ucstr_unchecked(sparkle_heart) };

assert_eq!("💖", sparkle_heart);

Converts a mutable wide C string slice to a mutable UTF-16 string slice without checking if the string slice is valid UTF-16.

The resulting string slice does not contain the nul terminator.

See the safe version, from_ucstr_mut, for more information.

Safety

This function is unsafe because it does not check that the string slice passed to it is valid UTF-16. If this constraint is violated, undefined behavior results as it is assumed the Utf16Str is always valid UTF-16.

Converts a wide C string slice to a UTF-16 string slice.

The resulting string slice does not contain the nul terminator.

Since U16CStr does not have a specified encoding, this conversion may fail if the U16CStr does not contain valid UTF-16 data.

If you are sure that the slice is valid UTF-16, and you don’t want to incur the overhead of the validity check, there is an unsafe version of this function, from_ucstr_unchecked, which has the same behavior but skips the check.

Errors

Returns an error if the string slice is not UTF-16 with a description as to why the provided string slice is not UTF-16.

Examples
use widestring::{Utf16Str, u16cstr};

let sparkle_heart = u16cstr!("💖");
let sparkle_heart = Utf16Str::from_ucstr(sparkle_heart).unwrap();

assert_eq!("💖", sparkle_heart);

Converts a mutable wide C string slice to a mutable UTF-16 string slice.

The resulting string slice does not contain the nul terminator.

Since U16CStr does not have a specified encoding, this conversion may fail if the U16CStr does not contain valid UTF-16 data.

If you are sure that the slice is valid UTF-16, and you don’t want to incur the overhead of the validity check, there is an unsafe version of this function, from_ucstr_unchecked_mut, which has the same behavior but skips the check.

Safety

This method is unsafe because you can violate the invariants of U16CStr when mutating the slice (i.e. by adding interior nul values).

Errors

Returns an error if the string slice is not UTF-16 with a description as to why the provided string slice is not UTF-16.

Converts to a standard UTF-8 String.

Because this string is always valid UTF-16, the conversion is lossless and non-fallible.

Checks that index-th value is the value in a UTF-16 code point sequence or the end of the string.

Returns true if the value at index is not a UTF-16 surrogate value, or if the value at index is the first value of a surrogate pair (the “high” surrogate). Returns false if the value at index is the second value of a surrogate pair (a.k.a the “low” surrogate).

The start and end of the string (when index == self.len()) are considered to be boundaries.

Returns false if index is greater than self.len()`.

Examples
let s = utf16str!("Sparkle 💖 Heart");
assert!(s.is_char_boundary(0));

// high surrogate of `💖`
assert!(s.is_char_boundary(8));
// low surrogate of `💖`
assert!(!s.is_char_boundary(9));

assert!(s.is_char_boundary(s.len()));

Returns a subslice of this string.

This is the non-panicking alternative to indexing the string. Returns None whenever equivalent indexing operation would panic.

Examples
let v = utf16str!("⚧️🏳️‍⚧️➡️s");

assert_eq!(Some(utf16str!("⚧️")), v.get(..2));
assert_eq!(Some(utf16str!("🏳️‍⚧️")), v.get(2..8));
assert_eq!(Some(utf16str!("➡️")), v.get(8..10));
assert_eq!(Some(utf16str!("s")), v.get(10..));

assert!(v.get(3..4).is_none());

Returns a mutable subslice of this string.

This is the non-panicking alternative to indexing the string. Returns None whenever equivalent indexing operation would panic.

Examples
let mut v = utf16str!("⚧️🏳️‍⚧️➡️s").to_owned();

assert_eq!(utf16str!("⚧️"), v.get_mut(..2).unwrap());
assert_eq!(utf16str!("🏳️‍⚧️"), v.get_mut(2..8).unwrap());
assert_eq!(utf16str!("➡️"), v.get_mut(8..10).unwrap());
assert_eq!(utf16str!("s"), v.get_mut(10..).unwrap());

assert!(v.get_mut(3..4).is_none());

Divide one string slice into two at an index.

The argument, mid, should be an offset from the start of the string. It must also be on the boundary of a UTF-16 code point.

The two slices returned go from the start of the string slice to mid, and from mid to the end of the string slice.

To get mutable string slices instead, see the split_at_mut method.

Panics

Panics if mid is not on a UTF-16 code point boundary, or if it is past the end of the last code point of the string slice.

Examples
let s = utf16str!("Per Martin-Löf");

let (first, last) = s.split_at(3);

assert_eq!("Per", first);
assert_eq!(" Martin-Löf", last);

Divide one mutable string slice into two at an index.

The argument, mid, should be an offset from the start of the string. It must also be on the boundary of a UTF-16 code point.

The two slices returned go from the start of the string slice to mid, and from mid to the end of the string slice.

To get immutable string slices instead, see the split_at method.

Panics

Panics if mid is not on a UTF-16 code point boundary, or if it is past the end of the last code point of the string slice.

Examples
let mut s = utf16str!("Per Martin-Löf").to_owned();

let (first, last) = s.split_at_mut(3);

assert_eq!("Per", first);
assert_eq!(" Martin-Löf", last);

Returns an iterator over the chars of a string slice.

As this string slice consists of valid UTF-16, we can iterate through a string slice by char. This method returns such an iterator.

It’s important to remember that char represents a Unicode Scalar Value, and might not match your idea of what a ‘character’ is. Iteration over grapheme clusters may be what you actually want. This functionality is not provided by this crate.

Returns an iterator over the chars of a string slice and their positions.

As this string slice consists of valid UTF-16, we can iterate through a string slice by char. This method returns an iterator of both these chars as well as their offsets.

The iterator yields tuples. The position is first, the char is second.

An iterator over the u16 code units of a string slice.

As a UTF-16 string slice consists of a sequence of u16 code units, we can iterate through a string slice by each code unit. This method returns such an iterator.

Returns an iterator of bytes over the string encoded as UTF-8.

Returns an iterator of u32 over the sting encoded as UTF-32.

Returns an iterator that escapes each char in self with char::escape_debug.

Returns an iterator that escapes each char in self with char::escape_default.

Returns an iterator that escapes each char in self with char::escape_unicode.

Returns the lowercase equivalent of this string slice, as a new Utf16String.

‘Lowercase’ is defined according to the terms of the Unicode Derived Core Property Lowercase.

Since some characters can expand into multiple characters when changing the case, this function returns a Utf16String instead of modifying the parameter in-place.

Returns the uppercase equivalent of this string slice, as a new Utf16String.

‘Uppercase’ is defined according to the terms of the Unicode Derived Core Property Uppercase.

Since some characters can expand into multiple characters when changing the case, this function returns a Utf16String instead of modifying the parameter in-place.

Trait Implementations

The resulting type after applying the + operator.

Performs the + operation. Read more

The resulting type after applying the + operator.

Performs the + operation. Read more

Performs the += operation. Read more

Performs the += operation. Read more

Converts this type into a mutable reference of the (usually inferred) input type.

Converts this type into a mutable reference of the (usually inferred) input type.

Converts this type into a shared reference of the (usually inferred) input type.

Converts this type into a shared reference of the (usually inferred) input type.

Converts this type into a shared reference of the (usually inferred) input type.

Converts this type into a shared reference of the (usually inferred) input type.

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Formats the value using the given formatter. Read more

Returns the “default value” for a type. Read more

Returns the “default value” for a type. Read more

Formats the value using the given formatter. Read more

Extends a collection with the contents of an iterator. Read more

🔬 This is a nightly-only experimental API. (extend_one)

Extends a collection with exactly one element.

🔬 This is a nightly-only experimental API. (extend_one)

Reserves capacity in a collection for the given number of additional elements. Read more

Extends a collection with the contents of an iterator. Read more

🔬 This is a nightly-only experimental API. (extend_one)

Extends a collection with exactly one element.

🔬 This is a nightly-only experimental API. (extend_one)

Reserves capacity in a collection for the given number of additional elements. Read more

Converts to this type from the input type.

Converts to this type from the input type.

Converts to this type from the input type.

Converts to this type from the input type.

Converts to this type from the input type.

Converts to this type from the input type.

Creates a value from an iterator. Read more

Creates a value from an iterator. Read more

Feeds this value into the given Hasher. Read more

Feeds a slice of this type into the given Hasher. Read more

The returned type after indexing.

Performs the indexing (container[index]) operation. Read more

Performs the mutable indexing (container[index]) operation. Read more

This method returns an Ordering between self and other. Read more

Compares and returns the maximum of two values. Read more

Compares and returns the minimum of two values. Read more

Restrict a value to a certain interval. Read more

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Converts the given value to a String. Read more