mirror of
1
Fork 0
gotosocial/vendor/github.com/klauspost/compress/snappy/decode.go

61 lines
1.9 KiB
Go
Raw Normal View History

// Copyright 2011 The Snappy-Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package snappy
import (
"io"
"github.com/klauspost/compress/s2"
)
var (
// ErrCorrupt reports that the input is invalid.
ErrCorrupt = s2.ErrCorrupt
// ErrTooLarge reports that the uncompressed length is too large.
ErrTooLarge = s2.ErrTooLarge
// ErrUnsupported reports that the input isn't supported.
ErrUnsupported = s2.ErrUnsupported
)
const (
// maxBlockSize is the maximum size of the input to encodeBlock. It is not
// part of the wire format per se, but some parts of the encoder assume
// that an offset fits into a uint16.
//
// Also, for the framing format (Writer type instead of Encode function),
// https://github.com/google/snappy/blob/master/framing_format.txt says
// that "the uncompressed data in a chunk must be no longer than 65536
// bytes".
maxBlockSize = 65536
)
// DecodedLen returns the length of the decoded block.
func DecodedLen(src []byte) (int, error) {
return s2.DecodedLen(src)
}
// Decode returns the decoded form of src. The returned slice may be a sub-
// slice of dst if dst was large enough to hold the entire decoded block.
// Otherwise, a newly allocated slice will be returned.
//
// The dst and src must not overlap. It is valid to pass a nil dst.
//
// Decode handles the Snappy block format, not the Snappy stream format.
func Decode(dst, src []byte) ([]byte, error) {
return s2.Decode(dst, src)
}
// NewReader returns a new Reader that decompresses from r, using the framing
// format described at
// https://github.com/google/snappy/blob/master/framing_format.txt
func NewReader(r io.Reader) *Reader {
return s2.NewReader(r, s2.ReaderMaxBlockSize(maxBlockSize))
}
// Reader is an io.Reader that can read Snappy-compressed bytes.
//
// Reader handles the Snappy stream format, not the Snappy block format.
type Reader = s2.Reader