Skip to content

Commit 4e4b6b1

Browse files
committed
Shifted packages around for nicer method call signature
1 parent 1695162 commit 4e4b6b1

File tree

5 files changed

+46
-41
lines changed

5 files changed

+46
-41
lines changed

README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import (
3434
"io/ioutil"
3535
"log"
3636

37-
"github.com/zencoder/go-smile/decode"
37+
"github.com/zencoder/go-smile/smile"
3838
)
3939

4040
func main() {
@@ -45,7 +45,7 @@ func main() {
4545
log.Fatal("Error reading Smile file:", smileFile)
4646
}
4747

48-
j, err := decode.DecodeToJSON(b)
48+
j, err := smile.DecodeToJSON(b)
4949
if err != nil {
5050
log.Fatal("Error decoding Smile file:", smileFile)
5151
}
@@ -61,5 +61,5 @@ $ go run main.go
6161

6262
The following convenience method is also provided for decoding to a Go representation of the JSON:
6363
```go
64-
obj, err := decode.DecodeToObject(b)
64+
obj, err := smile.DecodeToObject(b)
6565
```

decode/decoder.go

+5-33
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,14 @@
11
package decode
22

33
import (
4-
"encoding/json"
54
"fmt"
6-
7-
"github.com/zencoder/go-smile/domain"
85
)
96

10-
func DecodeToJSON(smile []byte) (string, error) {
11-
obj, err := DecodeToObject(smile)
12-
if err != nil {
13-
return "", err
14-
}
15-
16-
jsonBytes, err := json.Marshal(obj)
17-
if err != nil {
18-
return "", err
19-
}
20-
21-
return string(jsonBytes), nil
22-
}
23-
24-
func DecodeToObject(smile []byte) (interface{}, error) {
25-
header, err := domain.DecodeHeader(smile)
26-
if err != nil {
27-
return "", err
28-
}
29-
30-
var d decoder
31-
_, b, err := d.decodeBytes(smile[header.SizeBytes:])
32-
return b, err
33-
}
34-
35-
type decoder struct {
7+
type Decoder struct {
368
sharedState SharedState
379
}
3810

39-
func (d *decoder) decodeBytes(smileBytes []byte) ([]byte, interface{}, error) {
11+
func (d *Decoder) DecodeBytes(smileBytes []byte) ([]byte, interface{}, error) {
4012
var token = smileBytes[0]
4113
var tokenClass = token >> 5
4214
switch tokenClass {
@@ -86,7 +58,7 @@ func (d *decoder) decodeBytes(smileBytes []byte) ([]byte, interface{}, error) {
8658
return []byte{}, "", fmt.Errorf("unrecognised token: %X (Token Class %d)", token, tokenClass)
8759
}
8860

89-
func (d *decoder) parseBinaryLongTextStructureValues(smileBytes []byte) ([]byte, interface{}, error) {
61+
func (d *Decoder) parseBinaryLongTextStructureValues(smileBytes []byte) ([]byte, interface{}, error) {
9062
nextByte := smileBytes[0]
9163
switch nextByte {
9264
case START_OBJECT:
@@ -105,7 +77,7 @@ func (d *decoder) parseBinaryLongTextStructureValues(smileBytes []byte) ([]byte,
10577
return smileBytes, object, err
10678
}
10779

108-
smileBytes, value, err = d.decodeBytes(smileBytes)
80+
smileBytes, value, err = d.DecodeBytes(smileBytes)
10981
if err != nil {
11082
return smileBytes, object, err
11183
}
@@ -121,7 +93,7 @@ func (d *decoder) parseBinaryLongTextStructureValues(smileBytes []byte) ([]byte,
12193
for smileBytes[0] != END_ARRAY {
12294
var obj interface{}
12395
var err error
124-
smileBytes, obj, err = d.decodeBytes(smileBytes)
96+
smileBytes, obj, err = d.DecodeBytes(smileBytes)
12597
if err != nil {
12698
return smileBytes, obj, err
12799
}

decode/key.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Byte ranges are divides in 4 main sections (64 byte values each):
3232
0xFC - 0xFF: reserved for framing, not used in key mode (used in value mode)
3333
3434
*/
35-
func (d *decoder) parseKey(smileBytes []byte) ([]byte, interface{}, error) {
35+
func (d *Decoder) parseKey(smileBytes []byte) ([]byte, interface{}, error) {
3636
nextByte := smileBytes[0]
3737

3838
if nextByte == EMPTY_STRING {
@@ -71,13 +71,13 @@ func readShortUTF8Key(smileBytes []byte) ([]byte, interface{}, error) {
7171
return smileBytes[length:], string(smileBytes[:length]), nil
7272
}
7373

74-
func (d *decoder) readLongSharedKey(smileBytes []byte) ([]byte, interface{}, error) {
74+
func (d *Decoder) readLongSharedKey(smileBytes []byte) ([]byte, interface{}, error) {
7575
var ref = (int(smileBytes[0]&0x03) << 8) | int(smileBytes[1])
7676
key, err := d.sharedState.GetSharedKey(ref)
7777
return smileBytes[2:], key, err
7878
}
7979

80-
func (d *decoder) readShortSharedKey(smileBytes []byte) ([]byte, interface{}, error) {
80+
func (d *Decoder) readShortSharedKey(smileBytes []byte) ([]byte, interface{}, error) {
8181
var ref = int(smileBytes[0] & 0x3f)
8282
key, err := d.sharedState.GetSharedKey(ref)
8383
return smileBytes[1:], key, err

smile/smile.go

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package smile
2+
3+
import (
4+
"encoding/json"
5+
6+
"github.com/zencoder/go-smile/decode"
7+
"github.com/zencoder/go-smile/domain"
8+
)
9+
10+
func DecodeToJSON(smile []byte) (string, error) {
11+
obj, err := DecodeToObject(smile)
12+
if err != nil {
13+
return "", err
14+
}
15+
16+
jsonBytes, err := json.Marshal(obj)
17+
if err != nil {
18+
return "", err
19+
}
20+
21+
return string(jsonBytes), nil
22+
}
23+
24+
func DecodeToObject(smile []byte) (interface{}, error) {
25+
header, err := domain.DecodeHeader(smile)
26+
if err != nil {
27+
return "", err
28+
}
29+
30+
var d decode.Decoder
31+
_, b, err := d.DecodeBytes(smile[header.SizeBytes:])
32+
return b, err
33+
}

test/decode_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"testing"
66

77
"github.com/stretchr/testify/require"
8-
"github.com/zencoder/go-smile/decode"
8+
"github.com/zencoder/go-smile/smile"
99
"github.com/zencoder/go-smile/test/testdata"
1010
)
1111

@@ -19,7 +19,7 @@ func TestDecode(t *testing.T) {
1919
jsonFile := testdata.LoadTestFile(t, f+".json")
2020
smileFile := testdata.LoadTestFile(t, f+".smile")
2121

22-
actualJSON, err := decode.DecodeToJSON(smileFile)
22+
actualJSON, err := smile.DecodeToJSON(smileFile)
2323
require.NoError(t, err, "Error while decoding %q", f)
2424

2525
require.JSONEq(t, string(jsonFile), actualJSON, "Decoding %q didn't produce the expected result", f)

0 commit comments

Comments
 (0)