...

Source file src/github.com/spf13/viper/internal/encoding/hcl/codec.go

Documentation: github.com/spf13/viper/internal/encoding/hcl

     1  package hcl
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  
     7  	"github.com/hashicorp/hcl"
     8  	"github.com/hashicorp/hcl/hcl/printer"
     9  )
    10  
    11  // Codec implements the encoding.Encoder and encoding.Decoder interfaces for HCL encoding.
    12  // TODO: add printer config to the codec?
    13  type Codec struct{}
    14  
    15  func (Codec) Encode(v map[string]any) ([]byte, error) {
    16  	b, err := json.Marshal(v)
    17  	if err != nil {
    18  		return nil, err
    19  	}
    20  
    21  	// TODO: use printer.Format? Is the trailing newline an issue?
    22  
    23  	ast, err := hcl.Parse(string(b))
    24  	if err != nil {
    25  		return nil, err
    26  	}
    27  
    28  	var buf bytes.Buffer
    29  
    30  	err = printer.Fprint(&buf, ast.Node)
    31  	if err != nil {
    32  		return nil, err
    33  	}
    34  
    35  	return buf.Bytes(), nil
    36  }
    37  
    38  func (Codec) Decode(b []byte, v map[string]any) error {
    39  	return hcl.Unmarshal(b, &v)
    40  }
    41  

View as plain text