1 // Copyright 2011 The Snappy-Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4 5 package snappy
6 7 import (
8 "io"
9 10 "github.com/klauspost/compress/s2"
11 )
12 13 var (
14 // ErrCorrupt reports that the input is invalid.
15 ErrCorrupt = s2.ErrCorrupt
16 // ErrTooLarge reports that the uncompressed length is too large.
17 ErrTooLarge = s2.ErrTooLarge
18 // ErrUnsupported reports that the input isn't supported.
19 ErrUnsupported = s2.ErrUnsupported
20 )
21 22 const (
23 // maxBlockSize is the maximum size of the input to encodeBlock. It is not
24 // part of the wire format per se, but some parts of the encoder assume
25 // that an offset fits into a uint16.
26 //
27 // Also, for the framing format (Writer type instead of Encode function),
28 // https://github.com/google/snappy/blob/master/framing_format.txt says
29 // that "the uncompressed data in a chunk must be no longer than 65536
30 // bytes".
31 maxBlockSize = 65536
32 )
33 34 // DecodedLen returns the length of the decoded block.
35 func DecodedLen(src []byte) (int, error) {
36 return s2.DecodedLen(src)
37 }
38 39 // Decode returns the decoded form of src. The returned slice may be a sub-
40 // slice of dst if dst was large enough to hold the entire decoded block.
41 // Otherwise, a newly allocated slice will be returned.
42 //
43 // The dst and src must not overlap. It is valid to pass a nil dst.
44 //
45 // Decode handles the Snappy block format, not the Snappy stream format.
46 func Decode(dst, src []byte) ([]byte, error) {
47 return s2.Decode(dst, src)
48 }
49 50 // NewReader returns a new Reader that decompresses from r, using the framing
51 // format described at
52 // https://github.com/google/snappy/blob/master/framing_format.txt
53 func NewReader(r io.Reader) *Reader {
54 return s2.NewReader(r, s2.ReaderMaxBlockSize(maxBlockSize))
55 }
56 57 // Reader is an io.Reader that can read Snappy-compressed bytes.
58 //
59 // Reader handles the Snappy stream format, not the Snappy block format.
60 type Reader = s2.Reader
61