packer-cn/packer-plugin-sdk/rpc/cty_encode.go

36 lines
827 B
Go

package rpc
import (
"github.com/zclconf/go-cty/cty"
"github.com/zclconf/go-cty/cty/json"
)
// cty.Value is does not know how to encode itself through the wire so we
// transform it to bytes.
func encodeCTYValues(config []interface{}) ([]interface{}, error) {
for i := range config {
if v, ok := config[i].(cty.Value); ok {
b, err := json.Marshal(v, cty.DynamicPseudoType)
if err != nil {
return nil, err
}
config[i] = b
}
}
return config, nil
}
// decodeCTYValues will try to decode a cty value when it finds a byte slice
func decodeCTYValues(config []interface{}) ([]interface{}, error) {
for i := range config {
if b, ok := config[i].([]byte); ok {
t, err := json.Unmarshal(b, cty.DynamicPseudoType)
if err != nil {
return nil, err
}
config[i] = t
}
}
return config, nil
}