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  }