github.com/sashka/siva@v1.6.0/example_test.go (about)

     1  package siva_test
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"io"
     7  	"log"
     8  	"os"
     9  	"time"
    10  
    11  	"gopkg.in/src-d/go-siva.v1"
    12  )
    13  
    14  func Example() {
    15  	// Create a buffer to write our archive to.
    16  	buf := new(bytes.Buffer)
    17  
    18  	// Create a new siva archive.
    19  	w := siva.NewWriter(buf)
    20  
    21  	// Add some files to the archive.
    22  	var files = []struct {
    23  		Name, Body string
    24  	}{
    25  		{"gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"},
    26  		{"readme.txt", "This archive contains some text files."},
    27  		{"todo.txt", "Get animal handling license."},
    28  	}
    29  	for _, file := range files {
    30  		hdr := &siva.Header{
    31  			Name:    file.Name,
    32  			Mode:    0600,
    33  			ModTime: time.Now(),
    34  		}
    35  		if err := w.WriteHeader(hdr); err != nil {
    36  			log.Fatalln(err)
    37  		}
    38  		if _, err := w.Write([]byte(file.Body)); err != nil {
    39  			log.Fatalln(err)
    40  		}
    41  	}
    42  	// Make sure to check the error on Close.
    43  	if err := w.Close(); err != nil {
    44  		log.Fatalln(err)
    45  	}
    46  
    47  	// Open the siva archive for reading.
    48  	file := bytes.NewReader(buf.Bytes())
    49  	r := siva.NewReader(file)
    50  
    51  	// Get all files in the siva file.
    52  	i, err := r.Index()
    53  	if err != nil {
    54  		log.Fatalln(err)
    55  	}
    56  
    57  	// Iterate through the files in the archive.
    58  	for _, e := range i {
    59  		content, err := r.Get(e)
    60  		if err != nil {
    61  			log.Fatalln(err)
    62  		}
    63  		fmt.Printf("Contents of %s:\n", e.Name)
    64  		if _, err := io.Copy(os.Stdout, content); err != nil {
    65  			log.Fatalln(err)
    66  		}
    67  		fmt.Println()
    68  	}
    69  
    70  	// Output:
    71  	// Contents of gopher.txt:
    72  	// Gopher names:
    73  	// George
    74  	// Geoffrey
    75  	// Gonzo
    76  	// Contents of readme.txt:
    77  	// This archive contains some text files.
    78  	// Contents of todo.txt:
    79  	// Get animal handling license.
    80  }