decode.decodeObjectItems   B
last analyzed

Complexity

Conditions 7

Size

Total Lines 32
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 16
CRAP Score 7.392

Importance

Changes 0
Metric Value
cc 7
eloc 21
dl 0
loc 32
ccs 16
cts 20
cp 0.8
crap 7.392
rs 7.9759
c 0
b 0
f 0
nop 5
1
package decode
2
3
import "io"
4
5
func decodeObject(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 decodeObjectItems(reader, v, sz, rSize+rCount, cnt)
17
}
18
19
func decodeObjectItems(reader io.Reader, v interface{}, size int, wasRead readLen, items int) error {
20 1
	rItems := 0
21 1
	rPosition := wasRead
22
23 1
	for rItems < items && rPosition < readLen(size) {
24 1
		key, read, err := readObjectKey(reader)
25 1
		if err != nil {
26
			return err
27
		}
28 1
		rPosition += read
29
30 1
		btype, read, err := readType(reader)
31 1
		if err != nil {
32
			return err
33
		}
34 1
		rPosition += read
35
36 1
		bval, err := readValue(btype, reader)
37 1
		if err != nil {
38
			return err
39
		}
40 1
		rPosition += readLen(len(bval))
41
42 1
		err = addObjectItem(key, btype, bval, v)
43 1
		if err != nil {
44
			return err
45
		}
46
47 1
		rItems++
48
	}
49
50 1
	return nil
51
}
52
53
func readObjectKey(reader io.Reader) (string, readLen, error) {
54 1
	var bsz = make([]byte, 1)
55 1
	n, err := reader.Read(bsz)
56 1
	if err != nil {
57
		return "", 0, err
58
	}
59
60 1
	if n != 1 {
61
		return "", readLen(n), ErrIncompleteRead
62
	}
63
64 1
	sz := int(Uint8(bsz))
65
66 1
	var bkey = make([]byte, sz)
67
68 1
	n, err = reader.Read(bkey)
69 1
	if err != nil {
70
		return "", 0, err
71
	}
72
73 1
	if n != sz {
74
		return "", readLen(n), ErrIncompleteRead
75
	}
76
77 1
	return String(bkey), readLen(sz + 1), nil
78
}
79