...
1 package yamlfmt
2
3 import (
4 "bytes"
5
6 "sigs.k8s.io/kustomize/kyaml/kio"
7
8 "edge-infra.dev/pkg/edge/gitops/fns/normalizer"
9 "edge-infra.dev/pkg/edge/gitops/fns/trimmer"
10 )
11
12 type FormatterOption func(*ByteFormatter)
13
14 func WithFilterFunc(f kio.FilterFunc) FormatterOption {
15 return func(bf *ByteFormatter) {
16 bf.filterFuncs = append(bf.filterFuncs, f)
17 }
18 }
19
20 func makeOptions(bf *ByteFormatter, opts ...FormatterOption) {
21 for _, opt := range opts {
22 opt(bf)
23 }
24 }
25
26 func makeDefaults(bf *ByteFormatter) {
27 bf.normalizer = normalizer.Normalizer{}
28 bf.trimmer = trimmer.Trimmer{}
29 }
30
31 type ByteFormatter struct {
32 normalizer normalizer.Normalizer
33 trimmer trimmer.Trimmer
34 readWriter kio.ByteReadWriter
35 filterFuncs []kio.FilterFunc
36 }
37
38 func NewByteFormatter() *ByteFormatter {
39 bf := &ByteFormatter{
40 readWriter: kio.ByteReadWriter{},
41 }
42
43 makeDefaults(bf)
44 makeOptions(bf)
45
46 return bf
47 }
48
49 func (bf *ByteFormatter) FormatBytes(b []byte) ([]byte, error) {
50 var in, out bytes.Buffer
51
52 _, err := in.Write(b)
53 if err != nil {
54 return nil, err
55 }
56
57 bf.readWriter.Reader = &in
58 bf.readWriter.Writer = &out
59
60 err = kio.Pipeline{
61 Inputs: []kio.Reader{&bf.readWriter},
62 Outputs: []kio.Writer{&bf.readWriter},
63 Filters: []kio.Filter{
64 kio.FilterFunc(bf.trimmer.Run),
65 kio.FilterFunc(bf.normalizer.Run),
66 },
67 }.Execute()
68 if err != nil {
69 return nil, err
70 }
71
72 return out.Bytes(), nil
73 }
74
View as plain text