1). Second, the endianness of its memory layout is given by the type parameter `O`, which can be any type which implements [`ByteOrder`]. In particular, this refers to [`BigEndian`], [`LittleEndian`], [`NativeEndian`], and [`NetworkEndian`]. A `U128` can be constructed using the [`new`] method, and its contained value can be obtained as a native `u128` using the [`get`] method, or updated in place with the [`set`] method. In all cases, if the endianness `O` is not the same as the endianness of the current platform, an endianness swap will be performed in order to uphold the invariants that a) the layout of `U128` has endianness `O` and that, b) the layout of `u128` has the platform's native endianness. `U128` implements [`FromBytes`], [`IntoBytes`], and [`Unaligned`], making it useful for parsing and serialization. See the module documentation for an example of how it can be used for parsing UDP packets. [`new`]: crate::byteorder::U128::new [`get`]: crate::byteorder::U128::get [`set`]: crate::byteorder::U128::set [`FromBytes`]: crate::FromBytes [`IntoBytes`]: crate::IntoBytes [`Unaligned`]: crate::Unaligned