Total Lines | 43 |
Duplicated Lines | 0 % |
Coverage | 86.36% |
Changes | 0 |
1 | package decode |
||
2 | |||
3 | import "io" |
||
4 | |||
5 | func decodeList(reader io.Reader, v interface{}) error { |
||
6 | 1 | sz, rSize, err := readSize(reader) |
|
7 | 1 | if err != nil { |
|
8 | return err |
||
9 | } |
||
10 | |||
11 | 1 | cnt, rCount, err := readSize(reader) |
|
12 | 1 | if err != nil { |
|
13 | return err |
||
14 | } |
||
15 | |||
16 | 1 | return decodeListItems(reader, v, sz, rSize+rCount, cnt) |
|
17 | } |
||
18 | |||
19 | func decodeListItems(reader io.Reader, v interface{}, size int, wasRead readLen, items int) error { |
||
20 | 1 | rItems := 0 |
|
21 | 1 | readPosition := wasRead |
|
22 | |||
23 | 1 | for rItems < items && readPosition < readLen(size) { |
|
24 | 1 | btype, rlen, err := readType(reader) |
|
25 | 1 | if err != nil { |
|
26 | 1 | return err |
|
27 | } |
||
28 | |||
29 | 1 | bval, err := readValue(btype, reader) |
|
30 | 1 | if err != nil { |
|
31 | return err |
||
32 | } |
||
33 | |||
34 | 1 | err = addSliceItem(btype, bval, v) |
|
35 | 1 | if err != nil { |
|
36 | 1 | return err |
|
37 | } |
||
38 | |||
39 | 1 | rItems++ |
|
40 | 1 | readPosition += readLen(len(bval)) + rlen |
|
41 | } |
||
42 | |||
43 | 1 | return nil |
|
44 | } |
||
45 |