vendor/github.com/spf13/viper/internal/encoding/hcl/codec.go
changeset 260 445e01aede7e
equal deleted inserted replaced
259:db4911b0c721 260:445e01aede7e
       
     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]interface{}) ([]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]interface{}) error {
       
    39 	return hcl.Unmarshal(b, &v)
       
    40 }