-
Notifications
You must be signed in to change notification settings - Fork 239
/
decode.go
69 lines (55 loc) · 1.69 KB
/
decode.go
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
package registry
import (
"errors"
"fmt"
"io"
"io/fs"
"github.com/sirupsen/logrus"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/util/yaml"
)
// DecodeUnstructured decodes a raw stream into a an
// unstructured.Unstructured instance.
func DecodeUnstructured(reader io.Reader) (obj *unstructured.Unstructured, err error) {
decoder := yaml.NewYAMLOrJSONDecoder(reader, 30)
t := &unstructured.Unstructured{}
if err = decoder.Decode(t); err != nil {
return
}
obj = t
return
}
// DecodePackageManifest decodes a raw stream into a a PackageManifest instance.
// If a package name is empty we consider the object invalid!
func DecodePackageManifest(reader io.Reader) (manifest *PackageManifest, err error) {
decoder := yaml.NewYAMLOrJSONDecoder(reader, 30)
obj := &PackageManifest{}
if decodeErr := decoder.Decode(obj); decodeErr != nil {
err = fmt.Errorf("could not decode contents into package manifest - %v", decodeErr)
return
}
if obj.PackageName == "" {
err = errors.New("name of package (packageName) is missing")
return
}
manifest = obj
return
}
func decodeFileFS(root fs.FS, path string, into interface{}, log *logrus.Entry) error {
fileReader, err := root.Open(path)
if err != nil {
return fmt.Errorf("unable to read file %s: %s", path, err)
}
defer fileReader.Close()
decoder := yaml.NewYAMLOrJSONDecoder(fileReader, 30)
errRet := decoder.Decode(into)
if errRet == nil {
// Look for and warn about extra documents
extraDocument := &map[string]interface{}{}
err = decoder.Decode(extraDocument)
if err == nil && log != nil {
log.Warnf("found more than one document inside %s, using only the first one", path)
}
}
return errRet
}