@@ -39,7 +39,7 @@ mod _lzma {
39
39
use rustpython_vm:: types:: Constructor ;
40
40
use rustpython_vm:: { PyObjectRef , PyPayload , PyResult , VirtualMachine } ;
41
41
use std:: fmt;
42
- use xz2:: stream:: { Action , Check , Error , Filters , Status , Stream } ;
42
+ use xz2:: stream:: { Action , Check , Error , Filters , LzmaOptions , Status , Stream } ;
43
43
44
44
#[ cfg( windows) ]
45
45
type EnumVal = i32 ;
@@ -149,6 +149,11 @@ mod _lzma {
149
149
type Args = LZMADecompressorConstructorArgs ;
150
150
151
151
fn py_new ( cls : PyTypeRef , args : Self :: Args , vm : & VirtualMachine ) -> PyResult {
152
+ if args. format == FORMAT_RAW && args. memlimit . is_some ( ) {
153
+ return Err (
154
+ vm. new_value_error ( "Cannot specify memory limit with FORMAT_RAW" . to_string ( ) )
155
+ ) ;
156
+ }
152
157
let memlimit = args. memlimit . unwrap_or ( u64:: MAX ) ;
153
158
let filters = args. filters . unwrap_or ( 0 ) ;
154
159
let stream_result = match args. format {
@@ -322,6 +327,25 @@ mod _lzma {
322
327
. map_err ( |_| new_lzma_error ( "Failed to initialize encoder" , vm) ) ?)
323
328
}
324
329
}
330
+
331
+ fn init_alone (
332
+ preset : u32 ,
333
+ filter_specs : Option < Vec < PyObjectRef > > ,
334
+ vm : & VirtualMachine ,
335
+ ) -> PyResult < Stream > {
336
+ if let Some ( _filter_specs) = filter_specs {
337
+ Err ( new_lzma_error (
338
+ "TODO: RUSTPYTHON: LZMA: Alone filter specs" ,
339
+ vm,
340
+ ) )
341
+ } else {
342
+ let options = LzmaOptions :: new_preset ( preset)
343
+ . map_err ( |_| new_lzma_error ( "Failed to initialize encoder" , vm) ) ?;
344
+ let stream = Stream :: new_lzma_encoder ( & options)
345
+ . map_err ( |_| new_lzma_error ( "Failed to initialize encoder" , vm) ) ?;
346
+ Ok ( stream)
347
+ }
348
+ }
325
349
}
326
350
327
351
#[ derive( FromArgs ) ]
@@ -365,7 +389,8 @@ mod _lzma {
365
389
}
366
390
let stream = match args. format {
367
391
FORMAT_XZ => Self :: init_xz ( args. check , preset, args. filters , vm) ?,
368
- // TODO: ALONE AND RAW
392
+ FORMAT_ALONE => Self :: init_alone ( preset, args. filters , vm) ?,
393
+ // TODO: RAW
369
394
_ => return Err ( new_lzma_error ( "Invalid format" , vm) ) ,
370
395
} ;
371
396
Ok ( Self {
0 commit comments