...

Source file src/golang.conradwood.net/go-easyops/utils/yaml.go

Documentation: golang.conradwood.net/go-easyops/utils

     1  package utils
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"gopkg.in/yaml.v3"
     7  )
     8  
     9  // reads a raml file and parses it (strict) into interface. error if unknown tags are encountered in yaml
    10  func ReadYaml(filename string, target interface{}) error {
    11  	b, err := ReadFile(filename)
    12  	if err != nil {
    13  		return err
    14  	}
    15  
    16  	decoder := yaml.NewDecoder(bytes.NewReader(b))
    17  	decoder.KnownFields(true)
    18  	err = decoder.Decode(target)
    19  	//	err = yaml.Unmarshal(b, target)
    20  	if err != nil {
    21  		return err
    22  	}
    23  	return nil
    24  }
    25  
    26  // interprets the bytes as yaml and decodes it (strict) into interface. error if unknown tags are encountered in yaml
    27  func UnmarshalYaml(buf []byte, target interface{}) error {
    28  	decoder := yaml.NewDecoder(bytes.NewReader(buf))
    29  	decoder.KnownFields(true)
    30  	err := decoder.Decode(target)
    31  	//	err = yaml.Unmarshal(b, target)
    32  	if err != nil {
    33  		return err
    34  	}
    35  	return nil
    36  }
    37  
    38  // marshal 'src' to yaml as bytes
    39  func MarshalYaml(src interface{}) ([]byte, error) {
    40  	return yaml.Marshal(src)
    41  }
    42  
    43  // write 'data' as a yaml file to 'filename'
    44  func WriteYaml(filename string, data interface{}) error {
    45  	b, err := MarshalYaml(data)
    46  	if err != nil {
    47  		return fmt.Errorf("failed to marshal data for file \"%s\": %w\n", filename, err)
    48  	}
    49  	err = WriteFile(filename, b)
    50  	if err != nil {
    51  		return err
    52  	}
    53  	return nil
    54  }
    55  

View as plain text