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
|
||
|
}
|