mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-20 23:15:42 +00:00
30 lines
1008 B
Rust
30 lines
1008 B
Rust
pub trait EndianSensitive: Sized {
|
|
fn to_le(self) -> Self { self }
|
|
fn to_be(self) -> Self { self }
|
|
fn from_le(self) -> Self { self }
|
|
fn from_be(self) -> Self { self }
|
|
fn as_be_then<T, F: FnOnce(&Self) -> T>(&self, f: F) -> T { f(&self) }
|
|
fn as_le_then<T, F: FnOnce(&Self) -> T>(&self, f: F) -> T { f(&self) }
|
|
}
|
|
|
|
macro_rules! impl_endians {
|
|
( $( $t:ty ),* ) => { $(
|
|
impl EndianSensitive for $t {
|
|
fn to_le(self) -> Self { <$t>::to_le(self) }
|
|
fn to_be(self) -> Self { <$t>::to_be(self) }
|
|
fn from_le(self) -> Self { <$t>::from_le(self) }
|
|
fn from_be(self) -> Self { <$t>::from_be(self) }
|
|
fn as_be_then<T, F: FnOnce(&Self) -> T>(&self, f: F) -> T { let d = self.to_be(); f(&d) }
|
|
fn as_le_then<T, F: FnOnce(&Self) -> T>(&self, f: F) -> T { let d = self.to_le(); f(&d) }
|
|
}
|
|
)* }
|
|
}
|
|
macro_rules! impl_non_endians {
|
|
( $( $t:ty ),* ) => { $(
|
|
impl EndianSensitive for $t {}
|
|
)* }
|
|
}
|
|
|
|
impl_endians!(u16, u32, u64, usize, i16, i32, i64, isize);
|
|
impl_non_endians!(u8, i8, [u8; 20], [u8; 32]);
|