summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/mholt/archiver/v3/lz4.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/mholt/archiver/v3/lz4.go')
-rw-r--r--vendor/github.com/mholt/archiver/v3/lz4.go56
1 files changed, 56 insertions, 0 deletions
diff --git a/vendor/github.com/mholt/archiver/v3/lz4.go b/vendor/github.com/mholt/archiver/v3/lz4.go
new file mode 100644
index 0000000000..daff631d6d
--- /dev/null
+++ b/vendor/github.com/mholt/archiver/v3/lz4.go
@@ -0,0 +1,56 @@
+package archiver
+
+import (
+ "fmt"
+ "io"
+ "path/filepath"
+
+ "github.com/pierrec/lz4"
+)
+
+// Lz4 facilitates LZ4 compression.
+type Lz4 struct {
+ CompressionLevel int
+}
+
+// Compress reads in, compresses it, and writes it to out.
+func (lz *Lz4) Compress(in io.Reader, out io.Writer) error {
+ w := lz4.NewWriter(out)
+ w.Header.CompressionLevel = lz.CompressionLevel
+ defer w.Close()
+ _, err := io.Copy(w, in)
+ return err
+}
+
+// Decompress reads in, decompresses it, and writes it to out.
+func (lz *Lz4) Decompress(in io.Reader, out io.Writer) error {
+ r := lz4.NewReader(in)
+ _, err := io.Copy(out, r)
+ return err
+}
+
+// CheckExt ensures the file extension matches the format.
+func (lz *Lz4) CheckExt(filename string) error {
+ if filepath.Ext(filename) != ".lz4" {
+ return fmt.Errorf("filename must have a .lz4 extension")
+ }
+ return nil
+}
+
+func (lz *Lz4) String() string { return "lz4" }
+
+// NewLz4 returns a new, default instance ready to be customized and used.
+func NewLz4() *Lz4 {
+ return &Lz4{
+ CompressionLevel: 9, // https://github.com/lz4/lz4/blob/1b819bfd633ae285df2dfe1b0589e1ec064f2873/lib/lz4hc.h#L48
+ }
+}
+
+// Compile-time checks to ensure type implements desired interfaces.
+var (
+ _ = Compressor(new(Lz4))
+ _ = Decompressor(new(Lz4))
+)
+
+// DefaultLz4 is a default instance that is conveniently ready to use.
+var DefaultLz4 = NewLz4()