@@ -15,8 +15,6 @@ mod build {
15
15
use std:: borrow:: Cow ;
16
16
use std:: collections:: HashMap ;
17
17
use std:: collections:: HashSet ;
18
- use std:: fs:: File ;
19
- use std:: io:: BufReader ;
20
18
use std:: io:: Read ;
21
19
use std:: path:: Path ;
22
20
use std:: path:: PathBuf ;
@@ -54,17 +52,7 @@ impl DatabaseStorage {
54
52
}
55
53
DatabaseStorage :: Folder ( folder) => {
56
54
let sketch_path = folder. join ( format ! ( "{}.sketch" , & sketch. as_ref( ) . file_name) ) ;
57
- let writer = match File :: create ( & sketch_path) {
58
- Ok ( writer) => writer,
59
- Err ( err) => {
60
- return if let Some ( code) = err. raw_os_error ( ) {
61
- let msg = format ! ( "Failed to create {}" , sketch_path. display( ) ) ;
62
- Err ( PyOSError :: new_err ( ( code, msg) ) )
63
- } else {
64
- Err ( PyRuntimeError :: new_err ( err. to_string ( ) ) )
65
- }
66
- }
67
- } ;
55
+ let writer = utils:: buffered_create ( & sketch_path) ?;
68
56
match bincode:: serialize_into ( writer, & ( params, sketch. as_ref ( ) ) ) {
69
57
Ok ( ( ) ) => Ok ( ( ) ) ,
70
58
Err ( err) => return Err ( PyValueError :: new_err ( err. to_string ( ) ) ) ,
@@ -82,17 +70,7 @@ impl DatabaseStorage {
82
70
} ,
83
71
DatabaseStorage :: Folder ( path) => {
84
72
let entry_path = path. join ( format ! ( "{}.sketch" , name) ) ;
85
- let reader = match File :: open ( & entry_path) . map ( BufReader :: new) {
86
- Ok ( reader) => reader,
87
- Err ( err) => {
88
- return if let Some ( code) = err. raw_os_error ( ) {
89
- let msg = format ! ( "Failed to open {}" , entry_path. display( ) ) ;
90
- Err ( PyOSError :: new_err ( ( code, msg) ) )
91
- } else {
92
- Err ( PyRuntimeError :: new_err ( err. to_string ( ) ) )
93
- }
94
- }
95
- } ;
73
+ let reader = utils:: buffered_open ( & entry_path) ?;
96
74
match bincode:: deserialize_from :: < _ , ( SketchParams , skani:: types:: Sketch ) > ( reader) {
97
75
Err ( err) => Err ( PyValueError :: new_err ( err. to_string ( ) ) ) ,
98
76
Ok ( ( _, raw_sketch) ) => Ok ( Cow :: Owned ( Sketch :: from ( raw_sketch) ) ) ,
@@ -103,17 +81,7 @@ impl DatabaseStorage {
103
81
Some ( entry) => entry,
104
82
None => return Err ( PyKeyError :: new_err ( name. to_string ( ) ) ) ,
105
83
} ;
106
- let mut reader = match File :: open ( & path. join ( "sketches.db" ) ) . map ( BufReader :: new) {
107
- Ok ( reader) => reader,
108
- Err ( err) => {
109
- return if let Some ( code) = err. raw_os_error ( ) {
110
- let msg = format ! ( "Failed to open {}" , path. display( ) ) ;
111
- Err ( PyOSError :: new_err ( ( code, msg) ) )
112
- } else {
113
- Err ( PyRuntimeError :: new_err ( err. to_string ( ) ) )
114
- }
115
- }
116
- } ;
84
+ let mut reader = utils:: buffered_open ( & path. join ( "sketches.db" ) ) ?;
117
85
let mut buffer = vec ! [ 0 ; entry. length as usize ] ;
118
86
reader. seek_relative ( entry. offset as i64 ) ?;
119
87
reader. read_exact ( & mut buffer) ?;
@@ -192,18 +160,7 @@ impl Database {
192
160
where
193
161
P : AsRef < Path > ,
194
162
{
195
- let writer = match File :: create ( & path) {
196
- Ok ( writer) => writer,
197
- Err ( err) => {
198
- return if let Some ( code) = err. raw_os_error ( ) {
199
- let msg = format ! ( "Failed to create {}" , path. as_ref( ) . display( ) ) ;
200
- Err ( PyOSError :: new_err ( ( code, msg) ) )
201
- } else {
202
- Err ( PyRuntimeError :: new_err ( err. to_string ( ) ) )
203
- }
204
- }
205
- } ;
206
-
163
+ let writer = utils:: buffered_create ( path. as_ref ( ) ) ?;
207
164
if let Ok ( vec) = self . markers . read ( ) {
208
165
let refs = vec. iter ( ) . map ( |s| s. as_ref ( ) ) . collect :: < Vec < _ > > ( ) ;
209
166
match bincode:: serialize_into ( writer, & ( & self . params , & refs) ) {
@@ -219,17 +176,7 @@ impl Database {
219
176
where
220
177
P : AsRef < Path > ,
221
178
{
222
- let writer = match File :: create ( path. as_ref ( ) ) {
223
- Ok ( writer) => writer,
224
- Err ( err) => {
225
- return if let Some ( code) = err. raw_os_error ( ) {
226
- let msg = format ! ( "Failed to create {}" , path. as_ref( ) . display( ) ) ;
227
- Err ( PyOSError :: new_err ( ( code, msg) ) )
228
- } else {
229
- Err ( PyRuntimeError :: new_err ( err. to_string ( ) ) )
230
- }
231
- }
232
- } ;
179
+ let writer = utils:: buffered_create ( path. as_ref ( ) ) ?;
233
180
match bincode:: serialize_into ( writer, & ( & self . params , sketch. as_ref ( ) ) ) {
234
181
Ok ( ( ) ) => Ok ( ( ) ) ,
235
182
Err ( err) => return Err ( PyValueError :: new_err ( err. to_string ( ) ) ) ,
@@ -304,29 +251,13 @@ impl Database {
304
251
#[ classmethod]
305
252
#[ allow( unused) ]
306
253
pub fn open < ' py > ( cls : & Bound < ' py , PyType > , path : & Bound < ' py , PyAny > ) -> PyResult < Self > {
307
- macro_rules! open_or_fail {
308
- ( $path: ident) => {
309
- match File :: open( & $path) . map( BufReader :: new) {
310
- Ok ( reader) => reader,
311
- Err ( err) => {
312
- return if let Some ( code) = err. raw_os_error( ) {
313
- let msg = format!( "Failed to open {}" , $path. display( ) ) ;
314
- Err ( PyOSError :: new_err( ( code, msg) ) )
315
- } else {
316
- Err ( PyRuntimeError :: new_err( err. to_string( ) ) )
317
- }
318
- }
319
- }
320
- }
321
- }
322
-
323
254
// obtain Unicode representation of path
324
255
let decoded = self :: utils:: fsdecode ( path) ?;
325
256
let fspath = Path :: new ( decoded. to_str ( ) ?) ;
326
257
327
258
// load marker sketches
328
259
let markers_path = fspath. join ( "markers.bin" ) ;
329
- let reader = open_or_fail ! ( markers_path) ;
260
+ let reader = utils :: buffered_open ( & markers_path) ? ;
330
261
let ( params, raw_markers) =
331
262
match bincode:: deserialize_from :: < _ , ( SketchParams , Vec < skani:: types:: Sketch > ) > ( reader)
332
263
{
@@ -339,7 +270,7 @@ impl Database {
339
270
let index_path = fspath. join ( "index.db" ) ;
340
271
let sketches_path = fspath. join ( "sketches.db" ) ;
341
272
if index_path. exists ( ) && sketches_path. exists ( ) {
342
- let reader = open_or_fail ! ( index_path) ;
273
+ let reader = utils :: buffered_open ( & index_path) ? ;
343
274
let index = match bincode:: deserialize_from :: < _ , Vec < IndexEntry > > ( reader) {
344
275
Ok ( v) => v. into_iter ( ) . map ( |entry| ( entry. file_name . clone ( ) , entry) ) . collect :: < HashMap < _ , _ > > ( ) ,
345
276
Err ( err) => return Err ( PyValueError :: new_err ( err. to_string ( ) ) ) ,
0 commit comments