Skip to content

Package provides a generic interface to compress and un-compress

License

Notifications You must be signed in to change notification settings

ake-persson/compress

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
Ake Persson
Jul 20, 2021
f48b48c · Jul 20, 2021

History

91 Commits
Jul 20, 2021
Jul 20, 2021
Jul 20, 2021
Jul 20, 2021
Jul 20, 2021
Jul 20, 2021
Sep 17, 2018
Sep 18, 2018
Sep 17, 2018
Sep 18, 2018
Jul 20, 2021
Sep 25, 2018
Sep 20, 2018
Sep 18, 2018
Sep 21, 2018
Sep 20, 2018
Jul 20, 2021
Jul 20, 2021

Repository files navigation

GoDoc Go Report Card License Build Status codecov

compress

Package provides a generic interface to compress and un-compress

Example

package main

import (
        "flag"
        "fmt"
        "io/ioutil"
        "log"
        "os"
        "strings"

        "github.com/ake-persson/compress"
        _ "github.com/ake-persson/compress/gzip"
        _ "github.com/ake-persson/compress/lzw"
        _ "github.com/ake-persson/compress/snappy"
        _ "github.com/ake-persson/compress/xz"
        _ "github.com/ake-persson/compress/zlib"
)

func usage() {
        fmt.Printf("Usage: example [options] file\n\nOptions:\n")
        flag.PrintDefaults()
        os.Exit(0)
}

func main() {
        out := flag.String("out", "example", "Output.")
        algo := flag.String("algo", "gzip", fmt.Sprintf("Algorithms: [%s].", strings.Join(compress.Algorithms(), ", ")))
        dec := flag.Bool("dec", false, "Decode.")

        flag.Parse()

        if len(flag.Args()) < 1 {
                usage()
        }
        file := flag.Args()[0]

        a, err := compress.NewAlgorithm(*algo)
        if err != nil {
                log.Fatal(err)
        }

        if *dec {
                encoded, err := ioutil.ReadFile(file)
                if err != nil {
                        log.Fatal(err)
                }

                b, err := a.Decode(encoded)
                if err != nil {
                        log.Fatal(err)
                }

                fmt.Print(string(b))
        } else {
                b, err := ioutil.ReadFile(file)
                if err != nil {
                        log.Fatal(err)
                }

                encoded, err := a.Encode(b)
                if err != nil {
                        log.Fatal(err)
                }

                if err := ioutil.WriteFile(*out+"."+*algo, encoded, 0644); err != nil {
                        log.Fatal(err)
                }
        }
}