pub trait SimpleEndian: Sized + Clone {
fn to_big_endian(self) -> Self {
self
}
fn to_little_endian(self) -> Self {
self
}
fn from_big_endian(self) -> Self {
self
}
fn from_little_endian(self) -> Self {
self
}
fn endian(&self) -> crate::specific_endian::Endian {
if cfg!(target_endian = "big") {
crate::specific_endian::Endian::Big
} else {
crate::specific_endian::Endian::Little
}
}
}
impl SimpleEndian for () {}
#[cfg(feature = "simple_bool")]
impl SimpleEndian for bool {}
#[cfg(feature = "simple_byte_impls")]
impl SimpleEndian for u8 {}
#[cfg(feature = "simple_byte_impls")]
impl SimpleEndian for i8 {}
#[cfg(feature = "simple_char_impls")]
impl SimpleEndian for char {}
#[cfg(feature = "simple_string_impls")]
impl SimpleEndian for &str {}
#[cfg(feature = "simple_string_impls")]
impl SimpleEndian for String {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn unit_type_is_simple_endian() {
let _unit: () = ();
assert!(true); }
#[test]
#[cfg(feature = "simple_bool")]
fn bool_is_simple_endian() {
let b = true;
assert_eq!(b.to_big_endian(), b);
assert_eq!(b.to_little_endian(), b);
assert_eq!(b.from_big_endian(), b);
assert_eq!(b.from_little_endian(), b);
}
#[test]
#[cfg(feature = "simple_byte_impls")]
fn u8_is_simple_endian() {
let n: u8 = 42;
assert_eq!(n.to_big_endian(), n);
assert_eq!(n.to_little_endian(), n);
assert_eq!(n.from_big_endian(), n);
assert_eq!(n.from_little_endian(), n);
}
#[test]
#[cfg(feature = "simple_byte_impls")]
fn i8_is_simple_endian() {
let n: i8 = -42;
assert_eq!(n.to_big_endian(), n);
assert_eq!(n.to_little_endian(), n);
assert_eq!(n.from_big_endian(), n);
assert_eq!(n.from_little_endian(), n);
}
#[test]
#[cfg(feature = "simple_char_impls")]
fn char_is_simple_endian() {
let c: char = '🦀';
assert_eq!(c.to_big_endian(), c);
assert_eq!(c.to_little_endian(), c);
assert_eq!(c.from_big_endian(), c);
assert_eq!(c.from_little_endian(), c);
}
#[test]
#[cfg(feature = "simple_string_impls")]
fn str_is_simple_endian() {
let s = "hello";
assert_eq!(s.to_big_endian(), s);
assert_eq!(s.to_little_endian(), s);
assert_eq!(s.from_big_endian(), s);
assert_eq!(s.from_little_endian(), s);
}
#[test]
#[cfg(feature = "simple_string_impls")]
fn string_is_simple_endian() {
let s = String::from("hello");
let converted = s.clone().to_big_endian();
assert_eq!(converted, s);
let converted = s.clone().to_little_endian();
assert_eq!(converted, s);
let converted = s.clone().from_big_endian();
assert_eq!(converted, s);
let converted = s.clone().from_little_endian();
assert_eq!(converted, s);
}
}