pub struct H512(pub [u8; 64]);
Expand description
The 64-byte fixed-length binary data.
The name comes from the number of bits in the data.
In JSONRPC, it is encoded as a 0x-prefixed hex string.
Tuple Fields§
§0: [u8; 64]
Implementations§
Source§impl H512
impl H512
Sourcepub fn from_slice(input: &[u8]) -> Result<H512, FromSliceError>
pub fn from_slice(input: &[u8]) -> Result<H512, FromSliceError>
To convert the byte slice back into Self
.
Source§impl H512
impl H512
Sourcepub fn from_trimmed_str(input: &str) -> Result<H512, FromStrError>
pub fn from_trimmed_str(input: &str) -> Result<H512, FromStrError>
To convert a trimmed hexadecimal string into Self
.
If the beginning of a hexadecimal string are one or more zeros, then these zeros should be omitted.
There should be only one zero at the beginning of a hexadecimal string at most.
For example, if x
is H16
(a 16 bits binary data):
- when
x = [0, 0]
, the trimmed hexadecimal string should be “0” or “”. - when
x = [0, 1]
, the trimmed hexadecimal string should be “1”. - when
x = [1, 0]
, the trimmed hexadecimal string should be “100”.
use ckb_fixed_hash_core::H512 as Hash;
const BYTES_SIZE: usize = 64;
let mut inner = [0u8; BYTES_SIZE];
{
let actual = Hash(inner.clone());
let expected1 = Hash::from_trimmed_str("").unwrap();
let expected2 = Hash::from_trimmed_str("0").unwrap();
assert_eq!(actual, expected1);
assert_eq!(actual, expected2);
}
{
inner[BYTES_SIZE - 1] = 1;
let actual = Hash(inner);
let expected = Hash::from_trimmed_str("1").unwrap();
assert_eq!(actual, expected);
}
{
assert!(Hash::from_trimmed_str("00").is_err());
assert!(Hash::from_trimmed_str("000").is_err());
assert!(Hash::from_trimmed_str("0000").is_err());
assert!(Hash::from_trimmed_str("01").is_err());
assert!(Hash::from_trimmed_str("001").is_err());
assert!(Hash::from_trimmed_str("0001").is_err());
}
Trait Implementations§
Source§impl<'de> Deserialize<'de> for H512
impl<'de> Deserialize<'de> for H512
Source§fn deserialize<D>(
deserializer: D,
) -> Result<H512, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>(
deserializer: D,
) -> Result<H512, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl Ord for H512
impl Ord for H512
Source§impl PartialOrd for H512
impl PartialOrd for H512
Source§impl Serialize for H512
impl Serialize for H512
Source§fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
Serialize this value into the given Serde serializer. Read more
impl Eq for H512
Auto Trait Implementations§
impl Freeze for H512
impl RefUnwindSafe for H512
impl Send for H512
impl Sync for H512
impl Unpin for H512
impl UnwindSafe for H512
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)