Skip to main content

WstringCodeUnits

Enum WstringCodeUnits 

Source
pub enum WstringCodeUnits {
    Utf16,
    Utf8,
}
Expand description

Which octets stand for a wstring’s characters.

XTypes 1.3 Table 31 gives Char16 for a wstring’s code unit and §7.4.1.1.2 fixes the two things that follow from it: the length is “twice the number of characters in the string”, and the representation “shall not include a terminating NUL character(s)”. WstringLengthPolicy answers how the length is counted and whether there is a terminator; this answers what the characters are, and the two are separate because they part.

§The measurement

tests/interop-results/wstring-member/hdds/plain-cdr1.le.bin is 04 00 00 00 61 62 63 00 for @appendable struct S { wstring w; } with w = "abc": three octets of UTF-8 and a NUL, with the NUL inside the four the length declares — which is exactly what §7.4.1.1.1 gives a narrow string, and nothing §7.4.1.1.2 admits for a wstring.

wstring-unbounded-utf8 is the row that pins the encoding rather than the length. "äöü ሴ Z" is seven characters; UTF-8 puts them in twelve octets and the recorded file declares 0d 00 00 00 — thirteen, the twelve and the NUL — where §7.4.1.1.2’s rule and Table 31 give fourteen. The next four octets are c3 a4 c3 b6 c3 bc 20 e1 88 b4 20 5a 00, the twelve in UTF-8 and the terminator.

§What it does not reach

The scalar wchar is WcharWidth’s and not this: a peer whose wstring is UTF-8 can still write a four-octet scalar wchar, and one that writes a UTF-8 wstring does not thereby say what a wchar is. rmw_cyclonedds_cpp already parts the two that way.

And it makes WstringLengthPolicy’s C1 and C3 vacuous: with no fixed-width code unit there is nothing for a character count to count and no width for an octet count to multiply by, so the writer declares the UTF-8 octet count and only C2 — the terminator — still reaches the wire.

Variants§

§

Utf16

XTypes 1.3 Table 31’s Char16, two octets per code unit, and WstringLengthPolicy decides the rest. The default.

§

Utf8

The characters’ own UTF-8 octets, one to four per code point, with WstringTerminator’s answer still reached.

Implementations§

Source§

impl WstringCodeUnits

Source

pub const ALL: [Self; 2]

Both.

Source

pub const fn is_default(self) -> bool

Whether this is the default.

Source

pub const fn counts_octets(self) -> bool

Whether the length prefix counts octets rather than code units, whichever of the two answers WstringLengthCounts gives.

Under Self::Utf8 there is no code unit to count and no width to multiply an octet count by, so the octets are what the length names whatever C1 says. One predicate, so a reader of the writer cannot mistake one for the other.

Source

pub const fn as_str(self) -> &'static str

Short name, for configuration and diagnostics.

Source

pub fn parse(value: &str) -> Option<Self>

Parse a configuration value.

An unknown value returns None rather than falling back to the default: a typo in a wire-affecting setting must be loud.

Trait Implementations§

Source§

impl Clone for WstringCodeUnits

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for WstringCodeUnits

Source§

impl Debug for WstringCodeUnits

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for WstringCodeUnits

Source§

fn default() -> Self

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

impl Eq for WstringCodeUnits

Source§

impl Hash for WstringCodeUnits

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for WstringCodeUnits

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

fn clamp_to<R>(self, range: R) -> Self
where Self: Sized, R: ClampBounds<Self>,

🔬This is a nightly-only experimental API. (clamp_to)
Restrict a value to a certain range. Read more
Source§

impl PartialEq for WstringCodeUnits

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl PartialOrd for WstringCodeUnits

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 (const: unstable) · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 (const: unstable) · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 (const: unstable) · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 (const: unstable) · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl StructuralPartialEq for WstringCodeUnits

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.