File: resolver.go

package info (click to toggle)
invidtui 0.4.6-1.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 568 kB
  • sloc: makefile: 5
file content (98 lines) | stat: -rw-r--r-- 2,240 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package resolver

import (
	"io"
	"sync"

	"github.com/ugorji/go/codec"
)

// Resolver describes an encoder/decoder handler.
type Resolver struct {
	jsonDecoder *codec.Decoder
	jsonEncoder *codec.Encoder
	jsonHandle  sync.Mutex

	simpleDecoder *codec.Decoder
	simpleEncoder *codec.Encoder
	simpleHandle  sync.Mutex

	setupHandler sync.Mutex

	init bool
}

var resolver Resolver

// setup sets up the resolver.
func (r *Resolver) setup() {
	r.setupHandler.Lock()
	defer r.setupHandler.Unlock()

	if resolver.init {
		return
	}

	r.jsonDecoder = codec.NewDecoder(nil, &codec.JsonHandle{})
	r.jsonEncoder = codec.NewEncoder(nil, &codec.JsonHandle{})

	r.simpleDecoder = codec.NewDecoder(nil, &codec.JsonHandle{})
	r.simpleEncoder = codec.NewEncoder(nil, &codec.JsonHandle{})

	r.init = true
}

// DecodeJSONReader decodes JSON data from a Reader.
func DecodeJSONReader(reader io.Reader, apply interface{}) error {
	resolver.setup()

	resolver.jsonHandle.Lock()
	defer resolver.jsonHandle.Unlock()

	resolver.jsonDecoder.Reset(reader)
	return resolver.jsonDecoder.Decode(apply)
}

// DecodeJSONBytes decodes JSON data from a byte array.
func DecodeJSONBytes(data []byte, apply interface{}) error {
	resolver.setup()

	resolver.jsonHandle.Lock()
	defer resolver.jsonHandle.Unlock()

	resolver.jsonDecoder.ResetBytes(data)
	return resolver.jsonDecoder.Decode(apply)
}

// DecodeSimpleReader decodes data from a Reader.
func DecodeSimpleReader(reader io.Reader, apply interface{}) error {
	resolver.setup()

	resolver.simpleHandle.Lock()
	defer resolver.simpleHandle.Unlock()

	resolver.simpleDecoder.Reset(reader)
	return resolver.simpleDecoder.Decode(apply)
}

// DecodeSimpleBytes decodes data from a byte array.
func DecodeSimpleBytes(data []byte, apply interface{}) error {
	resolver.setup()

	resolver.simpleHandle.Lock()
	defer resolver.simpleHandle.Unlock()

	resolver.simpleDecoder.ResetBytes(data)
	return resolver.simpleDecoder.Decode(apply)
}

// EncodeJSONBytes encodes data from a byte array.
func EncodeSimpleBytes(data *[]byte, apply interface{}) error {
	resolver.setup()

	resolver.simpleHandle.Lock()
	defer resolver.simpleHandle.Unlock()

	resolver.simpleEncoder.ResetBytes(data)
	return resolver.simpleEncoder.Encode(apply)
}