@@ -96,18 +96,25 @@ impl Writer {
9696 self . write_trap_entries ( & mut trap_file)
9797 }
9898 Compression :: Gzip => {
99- let trap_file = GzEncoder :: new ( trap_file, flate2 :: Compression :: fast ( ) ) ;
99+ let trap_file = GzEncoder :: new ( trap_file, Compression :: GZIP_LEVEL ) ;
100100 let mut trap_file = BufWriter :: new ( trap_file) ;
101101 self . write_trap_entries ( & mut trap_file)
102102 }
103+ Compression :: Zstd => {
104+ let trap_file = zstd:: stream:: Encoder :: new ( trap_file, Compression :: ZSTD_LEVEL ) ?;
105+ let mut trap_file = BufWriter :: new ( trap_file) ;
106+ self . write_trap_entries ( & mut trap_file) ?;
107+ trap_file. into_inner ( ) ?. finish ( ) ?;
108+ Ok ( ( ) )
109+ }
103110 }
104111 }
105112
106113 fn write_trap_entries < W : Write > ( & self , file : & mut W ) -> std:: io:: Result < ( ) > {
107114 for trap_entry in & self . trap_output {
108115 writeln ! ( file, "{}" , trap_entry) ?;
109116 }
110- std :: io :: Result :: Ok ( ( ) )
117+ Ok ( ( ) )
111118 }
112119}
113120
@@ -280,9 +287,13 @@ fn limit_string(string: &str, max_size: usize) -> &str {
280287pub enum Compression {
281288 None ,
282289 Gzip ,
290+ Zstd ,
283291}
284292
285293impl Compression {
294+ pub const ZSTD_LEVEL : i32 = 2 ;
295+ pub const GZIP_LEVEL : flate2:: Compression = flate2:: Compression :: fast ( ) ;
296+
286297 pub fn from_env ( var_name : & str ) -> Result < Compression , String > {
287298 match std:: env:: var ( var_name) {
288299 Ok ( method) => match Compression :: from_string ( & method) {
@@ -298,6 +309,7 @@ impl Compression {
298309 match s. to_lowercase ( ) . as_ref ( ) {
299310 "none" => Some ( Compression :: None ) ,
300311 "gzip" => Some ( Compression :: Gzip ) ,
312+ "zstd" => Some ( Compression :: Zstd ) ,
301313 _ => None ,
302314 }
303315 }
@@ -306,6 +318,7 @@ impl Compression {
306318 match self {
307319 Compression :: None => "trap" ,
308320 Compression :: Gzip => "trap.gz" ,
321+ Compression :: Zstd => "trap.zst" ,
309322 }
310323 }
311324}
0 commit comments