mirror of
https://github.com/go-micro/go-micro.git
synced 2025-05-19 21:23:04 +02:00
37 lines
633 B
Go
37 lines
633 B
Go
package cue
|
|
|
|
import (
|
|
"cuelang.org/go/cue"
|
|
"github.com/ghodss/yaml"
|
|
"go-micro.dev/v4/config/encoder"
|
|
)
|
|
|
|
type cueEncoder struct{}
|
|
|
|
func (c cueEncoder) Encode(v interface{}) ([]byte, error) {
|
|
return yaml.Marshal(v)
|
|
}
|
|
|
|
func (c cueEncoder) Decode(d []byte, v interface{}) error {
|
|
var r cue.Runtime
|
|
instance, err := r.Compile("config", d)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
j, err := instance.Value().MarshalJSON()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return yaml.Unmarshal(j, v)
|
|
}
|
|
|
|
func (c cueEncoder) String() string {
|
|
return "cue"
|
|
}
|
|
|
|
// NewEncoder : create new cueEncoder
|
|
func NewEncoder() encoder.Encoder {
|
|
return cueEncoder{}
|
|
}
|