scsys_crypto/hash/h256/
impl_convert.rs

1/*
2    Appellation: impl_convert <module>
3    Contrib: @FL03
4*/
5use super::H256;
6
7impl FromIterator<u8> for H256 {
8    fn from_iter<T: IntoIterator<Item = u8>>(iter: T) -> Self {
9        let digest = iter.into_iter().collect::<Vec<u8>>();
10        crate::digest_to_hash::<32>(&digest).into()
11    }
12}
13
14impl IntoIterator for H256 {
15    type Item = u8;
16    type IntoIter = core::array::IntoIter<u8, 32>;
17
18    fn into_iter(self) -> Self::IntoIter {
19        self.0.into_iter()
20    }
21}
22
23impl<T> From<&T> for H256
24where
25    T: AsRef<[u8]>,
26{
27    fn from(data: &T) -> H256 {
28        let mut buffer: [u8; 32] = [0; 32];
29        buffer[..].copy_from_slice(data.as_ref());
30        H256(buffer)
31    }
32}
33
34impl From<[u8; 32]> for H256 {
35    fn from(input: [u8; 32]) -> H256 {
36        H256(input)
37    }
38}
39
40impl From<H256> for [u8; 32] {
41    fn from(input: H256) -> [u8; 32] {
42        input.0
43    }
44}
45
46impl From<Vec<u8>> for H256 {
47    fn from(input: Vec<u8>) -> H256 {
48        crate::digest_to_hash::<32>(&input).into()
49    }
50}
51
52impl From<H256> for Vec<u8> {
53    fn from(input: H256) -> Vec<u8> {
54        input.0.to_vec()
55    }
56}
57
58impl From<crate::GenericHash> for H256 {
59    fn from(data: crate::GenericHash) -> H256 {
60        data.as_slice().to_owned().into()
61    }
62}
63
64impl From<H256> for crate::GenericHash {
65    fn from(input: H256) -> crate::GenericHash {
66        crate::GenericHash::from(input.0)
67    }
68}
69
70impl From<crate::hash::H160> for H256 {
71    fn from(input: crate::hash::H160) -> H256 {
72        let mut buffer = [0; 32];
73        buffer[..].copy_from_slice(&input.0[0..20]);
74        buffer.into()
75    }
76}
77
78impl From<H256> for crate::hash::H160 {
79    fn from(input: H256) -> crate::hash::H160 {
80        let mut buffer = [0; 20];
81        buffer[..].copy_from_slice(&input.0[0..20]);
82        buffer.into()
83    }
84}