github.com/wangyougui/gf/v2@v2.6.5/encoding/gyaml/gyaml.go (about)

     1  // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
     2  //
     3  // This Source Code Form is subject to the terms of the MIT License.
     4  // If a copy of the MIT was not distributed with this file,
     5  // You can obtain one at https://github.com/wangyougui/gf.
     6  
     7  // Package gyaml provides accessing and converting for YAML content.
     8  package gyaml
     9  
    10  import (
    11  	"bytes"
    12  	"strings"
    13  
    14  	"gopkg.in/yaml.v3"
    15  
    16  	"github.com/wangyougui/gf/v2/errors/gerror"
    17  	"github.com/wangyougui/gf/v2/internal/json"
    18  	"github.com/wangyougui/gf/v2/util/gconv"
    19  )
    20  
    21  // Encode encodes `value` to an YAML format content as bytes.
    22  func Encode(value interface{}) (out []byte, err error) {
    23  	if out, err = yaml.Marshal(value); err != nil {
    24  		err = gerror.Wrap(err, `yaml.Marshal failed`)
    25  	}
    26  	return
    27  }
    28  
    29  // EncodeIndent encodes `value` to an YAML format content with indent as bytes.
    30  func EncodeIndent(value interface{}, indent string) (out []byte, err error) {
    31  	out, err = Encode(value)
    32  	if err != nil {
    33  		return
    34  	}
    35  	if indent != "" {
    36  		var (
    37  			buffer = bytes.NewBuffer(nil)
    38  			array  = strings.Split(strings.TrimSpace(string(out)), "\n")
    39  		)
    40  		for _, v := range array {
    41  			buffer.WriteString(indent)
    42  			buffer.WriteString(v)
    43  			buffer.WriteString("\n")
    44  		}
    45  		out = buffer.Bytes()
    46  	}
    47  	return
    48  }
    49  
    50  // Decode parses `content` into and returns as map.
    51  func Decode(content []byte) (map[string]interface{}, error) {
    52  	var (
    53  		result map[string]interface{}
    54  		err    error
    55  	)
    56  	if err = yaml.Unmarshal(content, &result); err != nil {
    57  		err = gerror.Wrap(err, `yaml.Unmarshal failed`)
    58  		return nil, err
    59  	}
    60  	return gconv.MapDeep(result), nil
    61  }
    62  
    63  // DecodeTo parses `content` into `result`.
    64  func DecodeTo(value []byte, result interface{}) (err error) {
    65  	err = yaml.Unmarshal(value, result)
    66  	if err != nil {
    67  		err = gerror.Wrap(err, `yaml.Unmarshal failed`)
    68  	}
    69  	return
    70  }
    71  
    72  // ToJson converts `content` to JSON format content.
    73  func ToJson(content []byte) (out []byte, err error) {
    74  	var (
    75  		result interface{}
    76  	)
    77  	if result, err = Decode(content); err != nil {
    78  		return nil, err
    79  	} else {
    80  		return json.Marshal(result)
    81  	}
    82  }