@@ -99,6 +99,8 @@ enum GenericZipWriter<W: Write + Seek> {
9999 Bzip2 ( BzEncoder < MaybeEncrypted < W > > ) ,
100100 #[ cfg( feature = "zstd" ) ]
101101 Zstd ( ZstdEncoder < ' static , MaybeEncrypted < W > > ) ,
102+ #[ cfg( feature = "xz" ) ]
103+ Xz ( xz2:: write:: XzEncoder < MaybeEncrypted < W > > ) ,
102104}
103105
104106impl < W : Write + Seek > Debug for GenericZipWriter < W > {
@@ -118,6 +120,8 @@ impl<W: Write + Seek> Debug for GenericZipWriter<W> {
118120 GenericZipWriter :: Bzip2 ( w) => f. write_fmt ( format_args ! ( "Bzip2({:?})" , w. get_ref( ) ) ) ,
119121 #[ cfg( feature = "zstd" ) ]
120122 GenericZipWriter :: Zstd ( w) => f. write_fmt ( format_args ! ( "Zstd({:?})" , w. get_ref( ) ) ) ,
123+ #[ cfg( feature = "xz" ) ]
124+ GenericZipWriter :: Xz ( w) => f. write_fmt ( format_args ! ( "Xz({:?})" , w. get_ref( ) ) ) ,
121125 }
122126 }
123127}
@@ -1763,7 +1767,12 @@ impl<W: Write + Seek> GenericZipWriter<W> {
17631767 }
17641768 #[ cfg( feature = "xz" ) ]
17651769 CompressionMethod :: Xz => {
1766- Err ( UnsupportedArchive ( "XZ isn't supported for compression" ) )
1770+ let level = clamp_opt ( compression_level. unwrap_or ( 6 ) , 0 ..=9 )
1771+ . ok_or ( UnsupportedArchive ( "Unsupported compression level" ) ) ?
1772+ as u32 ;
1773+ Ok ( Box :: new ( move |bare| {
1774+ GenericZipWriter :: Xz ( xz2:: write:: XzEncoder :: new ( bare, level) )
1775+ } ) )
17671776 }
17681777 CompressionMethod :: Unsupported ( ..) => {
17691778 Err ( UnsupportedArchive ( "Unsupported compression" ) )
@@ -1788,6 +1797,8 @@ impl<W: Write + Seek> GenericZipWriter<W> {
17881797 GenericZipWriter :: Bzip2 ( w) => w. finish ( ) ?,
17891798 #[ cfg( feature = "zstd" ) ]
17901799 GenericZipWriter :: Zstd ( w) => w. finish ( ) ?,
1800+ #[ cfg( feature = "xz" ) ]
1801+ GenericZipWriter :: Xz ( w) => w. finish ( ) ?,
17911802 Closed => {
17921803 return Err ( io:: Error :: new (
17931804 io:: ErrorKind :: BrokenPipe ,
@@ -1813,6 +1824,8 @@ impl<W: Write + Seek> GenericZipWriter<W> {
18131824 GenericZipWriter :: Bzip2 ( ref mut w) => Some ( w as & mut dyn Write ) ,
18141825 #[ cfg( feature = "zstd" ) ]
18151826 GenericZipWriter :: Zstd ( ref mut w) => Some ( w as & mut dyn Write ) ,
1827+ #[ cfg( feature = "xz" ) ]
1828+ GenericZipWriter :: Xz ( ref mut w) => Some ( w as & mut dyn Write ) ,
18161829 Closed => None ,
18171830 }
18181831 }
0 commit comments