decode/decode_value.go   A
last analyzed

Size/Duplication

Total Lines 42
Duplicated Lines 0 %

Test Coverage

Coverage 80%

Importance

Changes 0
Metric Value
cc 7
eloc 24
dl 0
loc 42
c 0
b 0
f 0
ccs 12
cts 15
cp 0.8
crap 7.392
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A decode.newValueDecoder 0 2 1
B decode.*valueDecoder.DecodeValue 0 25 6
1
package decode
2
3
import (
4
	"io"
5
	"reflect"
6
7
	"github.com/et-nik/binngo/binn"
8
)
9
10
type valueDecoder struct {
11
	binnType binn.Type
12
}
13
14
func newValueDecoder(binnType binn.Type) *valueDecoder {
15 1
	return &valueDecoder{binnType}
16
}
17
18
func (vd *valueDecoder) DecodeValue(reader io.Reader, v interface{}) error {
19 1
	valuePtr := reflect.ValueOf(v)
20 1
	value := valuePtr.Elem()
21
22 1
	if !value.CanSet() {
23
		return ErrCantSetValue
24
	}
25
26 1
	bval, err := readValue(vd.binnType, reader)
27 1
	if err != nil {
28
		return err
29
	}
30
31 1
	converted, err := decodeItem(value.Type(), vd.binnType, bval)
32 1
	if err != nil {
33
		return err
34
	}
35
36 1
	if value.Kind() != reflect.ValueOf(converted).Kind() && value.Kind() != reflect.Interface {
37 1
		return &UnknownValueError{reflect.ValueOf(converted).Kind(), value.Kind()}
38
	}
39
40 1
	value.Set(reflect.ValueOf(converted))
41
42 1
	return nil
43
}
44