@@ -14,6 +14,12 @@ use pin_project_lite::pin_project;
1414
1515use super :: named:: File ;
1616
17+ #[ derive( Debug , Clone , Copy ) ]
18+ pub ( crate ) enum ReadMode {
19+ Sync ,
20+ Async ,
21+ }
22+
1723pin_project ! {
1824 /// Adapter to read a `std::file::File` in chunks.
1925 #[ doc( hidden) ]
@@ -24,7 +30,7 @@ pin_project! {
2430 state: ChunkedReadFileState <Fut >,
2531 counter: u64 ,
2632 callback: F ,
27- read_sync : bool ,
33+ read_mode : ReadMode ,
2834 }
2935}
3036
@@ -58,7 +64,7 @@ pub(crate) fn new_chunked_read(
5864 size : u64 ,
5965 offset : u64 ,
6066 file : File ,
61- size_threshold : u64 ,
67+ read_mode_threshold : u64 ,
6268) -> impl Stream < Item = Result < Bytes , Error > > {
6369 ChunkedReadFile {
6470 size,
@@ -71,7 +77,11 @@ pub(crate) fn new_chunked_read(
7177 } ,
7278 counter : 0 ,
7379 callback : chunked_read_file_callback,
74- read_sync : size < size_threshold,
80+ read_mode : if size < read_mode_threshold {
81+ ReadMode :: Sync
82+ } else {
83+ ReadMode :: Async
84+ } ,
7585 }
7686}
7787
@@ -102,13 +112,14 @@ async fn chunked_read_file_callback(
102112 file : File ,
103113 offset : u64 ,
104114 max_bytes : usize ,
105- read_sync : bool ,
115+ read_mode : ReadMode ,
106116) -> Result < ( File , Bytes ) , Error > {
107- let res = if read_sync {
108- chunked_read_file_callback_sync ( file, offset, max_bytes) ?
109- } else {
110- actix_web:: web:: block ( move || chunked_read_file_callback_sync ( file, offset, max_bytes) )
111- . await ??
117+ let res = match read_mode {
118+ ReadMode :: Sync => chunked_read_file_callback_sync ( file, offset, max_bytes) ?,
119+ ReadMode :: Async => {
120+ actix_web:: web:: block ( move || chunked_read_file_callback_sync ( file, offset, max_bytes) )
121+ . await ??
122+ }
112123 } ;
113124
114125 Ok ( res)
@@ -187,7 +198,7 @@ where
187198#[ cfg( not( feature = "experimental-io-uring" ) ) ]
188199impl < F , Fut > Stream for ChunkedReadFile < F , Fut >
189200where
190- F : Fn ( File , u64 , usize , bool ) -> Fut ,
201+ F : Fn ( File , u64 , usize , ReadMode ) -> Fut ,
191202 Fut : Future < Output = Result < ( File , Bytes ) , Error > > ,
192203{
193204 type Item = Result < Bytes , Error > ;
@@ -209,7 +220,7 @@ where
209220 . take ( )
210221 . expect ( "ChunkedReadFile polled after completion" ) ;
211222
212- let fut = ( this. callback ) ( file, offset, max_bytes, * this. read_sync ) ;
223+ let fut = ( this. callback ) ( file, offset, max_bytes, * this. read_mode ) ;
213224
214225 this. state
215226 . project_replace ( ChunkedReadFileState :: Future { fut } ) ;
0 commit comments