@@ -21,58 +21,43 @@ impl Connection {
21
21
headers. get ( key) . and_then ( |h| h. to_str ( ) . ok ( ) )
22
22
}
23
23
24
- fn get_length ( rt : AtomicRuntime , url : String ) -> Result < usize , reqwest :: Error > {
25
- let Some ( response) = rt
24
+ fn get_length ( rt : AtomicRuntime , url : String ) -> Option < usize > {
25
+ if let Some ( response) = rt
26
26
. block_on ( move |client| client. get ( url) . send ( ) )
27
27
. and_then ( |r| r. ok ( ) )
28
- else {
29
- return Ok ( 0 ) ;
30
- } ;
31
-
32
- let headers = response. headers ( ) ;
33
- let Some ( accept_range) = Self :: get_header ( headers, ACCEPT_RANGES ) else {
34
- return Ok ( 0 ) ;
35
- } ;
36
-
37
- if accept_range != "bytes" {
38
- return Ok ( 0 ) ;
28
+ {
29
+ let headers = response. headers ( ) ;
30
+ if let Some ( accept_range) = Self :: get_header ( headers, ACCEPT_RANGES ) {
31
+ if accept_range == "bytes" {
32
+ let length = Self :: get_header ( headers, CONTENT_LENGTH )
33
+ . and_then ( |s| s. parse ( ) . ok ( ) )
34
+ . unwrap_or_default ( ) ;
35
+ return Some ( length) ;
36
+ }
37
+ }
39
38
}
40
-
41
- let length = Self :: get_header ( headers, CONTENT_LENGTH )
42
- . and_then ( |s| s. parse ( ) . ok ( ) )
43
- . unwrap_or_default ( ) ;
44
- Ok ( length)
39
+ None
45
40
}
46
41
47
42
fn init_with_url ( url : & str ) -> Result < ( AtomicRuntime , usize ) , Error > {
48
43
let rt = AtomicRuntime :: default ( ) ;
49
44
match Self :: get_length ( rt. clone ( ) , url. to_string ( ) ) {
50
- Ok ( size) => {
51
- if size != 0 {
52
- Ok ( ( rt, size) )
53
- } else {
54
- rt. drop ( ) ;
55
- Err ( Error :: new (
56
- ErrorKind :: InvalidData ,
57
- "database size is not a multiple of page size" ,
58
- ) )
59
- }
60
- }
61
- Err ( e) => {
45
+ Some ( size) if size != 0 => Ok ( ( rt, size) ) ,
46
+ _ => {
62
47
rt. drop ( ) ;
63
48
Err ( Error :: new (
64
49
ErrorKind :: Other ,
65
- format ! ( "Failed to initialize db: {e}" ) ,
50
+ "Failed to check database size" ,
66
51
) )
67
52
}
68
53
}
69
54
}
70
55
71
- pub fn new ( url : & str ) -> Result < Self , Error > {
72
- let ( rt, size ) = Self :: init_with_url ( url) ?;
56
+ pub fn new ( url : & str , block_size : usize ) -> Result < Self , Error > {
57
+ let ( rt, length ) = Self :: init_with_url ( url) ?;
73
58
let buffer = LazyBuffer :: new (
74
- size ,
75
- 1024 * 1024 * 10 ,
59
+ length ,
60
+ block_size ,
76
61
Box :: new ( {
77
62
let url = url. to_string ( ) ;
78
63
let rt = rt. clone ( ) ;
0 commit comments