36 lines
827 B
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
|
|
}
|