summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/mholt/archiver/v3/bz2.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/mholt/archiver/v3/bz2.go')
-rw-r--r--vendor/github.com/mholt/archiver/v3/bz2.go64
1 files changed, 64 insertions, 0 deletions
diff --git a/vendor/github.com/mholt/archiver/v3/bz2.go b/vendor/github.com/mholt/archiver/v3/bz2.go
new file mode 100644
index 0000000000..2eb4ac2b88
--- /dev/null
+++ b/vendor/github.com/mholt/archiver/v3/bz2.go
@@ -0,0 +1,64 @@
+package archiver
+
+import (
+ "fmt"
+ "io"
+ "path/filepath"
+
+ "github.com/dsnet/compress/bzip2"
+)
+
+// Bz2 facilitates bzip2 compression.
+type Bz2 struct {
+ CompressionLevel int
+}
+
+// Compress reads in, compresses it, and writes it to out.
+func (bz *Bz2) Compress(in io.Reader, out io.Writer) error {
+ w, err := bzip2.NewWriter(out, &bzip2.WriterConfig{
+ Level: bz.CompressionLevel,
+ })
+ if err != nil {
+ return err
+ }
+ defer w.Close()
+ _, err = io.Copy(w, in)
+ return err
+}
+
+// Decompress reads in, decompresses it, and writes it to out.
+func (bz *Bz2) Decompress(in io.Reader, out io.Writer) error {
+ r, err := bzip2.NewReader(in, nil)
+ if err != nil {
+ return err
+ }
+ defer r.Close()
+ _, err = io.Copy(out, r)
+ return err
+}
+
+// CheckExt ensures the file extension matches the format.
+func (bz *Bz2) CheckExt(filename string) error {
+ if filepath.Ext(filename) != ".bz2" {
+ return fmt.Errorf("filename must have a .bz2 extension")
+ }
+ return nil
+}
+
+func (bz *Bz2) String() string { return "bz2" }
+
+// NewBz2 returns a new, default instance ready to be customized and used.
+func NewBz2() *Bz2 {
+ return &Bz2{
+ CompressionLevel: bzip2.DefaultCompression,
+ }
+}
+
+// Compile-time checks to ensure type implements desired interfaces.
+var (
+ _ = Compressor(new(Bz2))
+ _ = Decompressor(new(Bz2))
+)
+
+// DefaultBz2 is a default instance that is conveniently ready to use.
+var DefaultBz2 = NewBz2()