github.com/matthewmueller/go-archive@v1.0.3-0.20180913190615-0f8ce9f192c4/archive_zip.go (about) 1 package archive 2 3 import ( 4 "io" 5 "os" 6 7 "github.com/klauspost/compress/zip" 8 ) 9 10 // Writer is the writer interface for archive formats. 11 type Writer interface { 12 Open() error 13 Close() error 14 Add(os.FileInfo) (io.Writer, error) 15 } 16 17 // newZipWriter returns a new zip writer. 18 func newZipWriter(w io.Writer) *zipWriter { 19 return &zipWriter{w: w} 20 } 21 22 // zipWriter is the zip implementation of archive.Writer. 23 type zipWriter struct { 24 w io.Writer 25 zip *zip.Writer 26 } 27 28 // Open implementation. 29 func (w *zipWriter) Open() error { 30 w.zip = zip.NewWriter(w.w) 31 return nil 32 } 33 34 // Close implementation. 35 func (w *zipWriter) Close() error { 36 return w.zip.Close() 37 } 38 39 // Add implementation. 40 func (w *zipWriter) Add(info os.FileInfo) (io.Writer, error) { 41 h, err := zip.FileInfoHeader(info) 42 if err != nil { 43 return nil, err 44 } 45 46 h.Method = zip.Deflate 47 48 return w.zip.CreateHeader(h) 49 }