1
1
use anyhow:: Result ;
2
2
use cid:: Cid ;
3
3
use futures:: stream:: StreamExt ;
4
- use ipfs_api :: IpfsApi ;
5
- use multihash:: { Code , MultihashDigest , Sha2Digest , Sha2_256 , StatefulHasher , U32 } ;
4
+ use ipfs_api_backend_hyper :: IpfsApi ;
5
+ use multihash:: { Code , Hasher , Multihash , MultihashDigest , Sha2_256 } ;
6
6
use tokio:: io:: { AsyncRead , AsyncReadExt , AsyncWrite , AsyncWriteExt } ;
7
7
8
8
/// Verbatim from IPFS cli docs:
@@ -14,9 +14,7 @@ const CHUNKER_FIXED_BLOCK_SIZE: usize = 256 * 1024;
14
14
15
15
const BUFFER_SIZE : usize = CHUNKER_FIXED_BLOCK_SIZE / 256 ;
16
16
17
- async fn sha256_hash_of_raw_block (
18
- mut input : impl AsyncRead + AsyncReadExt + Unpin ,
19
- ) -> Result < Sha2Digest < U32 > > {
17
+ async fn sha256_hash_of_raw_block ( mut input : impl AsyncRead + Unpin ) -> Result < Multihash > {
20
18
let mut buffer = [ 0u8 ; BUFFER_SIZE ] ;
21
19
let mut hasher = Sha2_256 :: default ( ) ;
22
20
loop {
@@ -26,13 +24,12 @@ async fn sha256_hash_of_raw_block(
26
24
}
27
25
hasher. update ( & buffer[ ..bytes_read] ) ;
28
26
}
29
- Ok ( hasher. finalize ( ) )
27
+ Ok ( Code :: Sha2_256 . wrap ( hasher. finalize ( ) ) ? )
30
28
}
31
29
32
- async fn cid_of_raw_block ( input : impl AsyncRead + AsyncReadExt + Unpin ) -> Result < Cid > {
30
+ async fn cid_of_raw_block ( input : impl AsyncRead + Unpin ) -> Result < Cid > {
33
31
let sha256_hash = sha256_hash_of_raw_block ( input) . await ?;
34
- let hash = Code :: multihash_from_digest ( & sha256_hash) ;
35
- Ok ( Cid :: new_v0 ( hash. into ( ) ) . unwrap ( ) )
32
+ Ok ( Cid :: new_v0 ( sha256_hash) . unwrap ( ) )
36
33
}
37
34
38
35
/// Convert a file's raw IPFS block back into the file itself
@@ -43,8 +40,8 @@ async fn cid_of_raw_block(input: impl AsyncRead + AsyncReadExt + Unpin) -> Resul
43
40
/// <https://github.com/git-lfs/git-lfs/blob/main/docs/extensions.md#smudge>
44
41
pub async fn smudge < E : ' static + Send + Sync + std:: error:: Error > (
45
42
client : impl IpfsApi < Error = E > ,
46
- input : impl AsyncRead + AsyncReadExt + Unpin ,
47
- mut output : impl AsyncWrite + AsyncWriteExt + Unpin ,
43
+ input : impl AsyncRead + Unpin ,
44
+ mut output : impl AsyncWrite + Unpin ,
48
45
) -> Result < ( ) > {
49
46
let cid = cid_of_raw_block ( input) . await ?;
50
47
let mut stream = client. cat ( & format ! ( "/ipfs/{}" , cid) ) ;
@@ -70,7 +67,7 @@ mod tests {
70
67
#[ tokio:: test]
71
68
async fn sha256_hash_of_raw_block_returns_expected_hash ( ) {
72
69
assert_eq ! (
73
- sha256_hash_of_raw_block( RAW_BLOCK ) . await . unwrap( ) . as_ref ( ) ,
70
+ sha256_hash_of_raw_block( RAW_BLOCK ) . await . unwrap( ) . digest ( ) ,
74
71
hex:: decode( SHA256_HASH ) . unwrap( )
75
72
) ;
76
73
}
0 commit comments