o [`BigEndian`], [`LittleEndian`], [`NativeEndian`], and [`NetworkEndian`].

An `I16` can be constructed using
the [`new`] method, and its contained value can be obtained as a native
`i16` 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 `I16`
has endianness `O` and that, b) the layout of `i16` has
the platform's native endianness.

`I16` 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::I16::new
[`get`]: crate::byteorder::I16::get
[`set`]: crate::byteorder::I16::set
[`FromBytes`]: crate::FromBytes
[`IntoBytes`]: crate::IntoBytes
[`Unaligned`]: crate::Unaligned