...

Source file src/edge-infra.dev/pkg/edge/yamlfmt/formatter.go

Documentation: edge-infra.dev/pkg/edge/yamlfmt

     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