Add EncodeToNode(interface{}) (ast.Node, error)

This commit is contained in:
Masaaki Goshima 2020-06-22 23:29:54 +09:00
parent c6273cdf6e
commit 41c7fbad9f

View file

@ -68,20 +68,29 @@ func (e *Encoder) Close() error {
// //
// See the documentation for Marshal for details about the conversion of Go values to YAML. // See the documentation for Marshal for details about the conversion of Go values to YAML.
func (e *Encoder) Encode(v interface{}) error { func (e *Encoder) Encode(v interface{}) error {
for _, opt := range e.opts { node, err := e.EncodeToNode(v)
if err := opt(e); err != nil {
return errors.Wrapf(err, "failed to run option for encoder")
}
}
node, err := e.encodeValue(reflect.ValueOf(v), 1)
if err != nil { if err != nil {
return errors.Wrapf(err, "failed to encode value") return errors.Wrapf(err, "failed to encode to node")
} }
var p printer.Printer var p printer.Printer
e.writer.Write(p.PrintNode(node)) e.writer.Write(p.PrintNode(node))
return nil return nil
} }
// EncodeToNode convert v to ast.Node.
func (e *Encoder) EncodeToNode(v interface{}) (ast.Node, error) {
for _, opt := range e.opts {
if err := opt(e); err != nil {
return nil, errors.Wrapf(err, "failed to run option for encoder")
}
}
node, err := e.encodeValue(reflect.ValueOf(v), 1)
if err != nil {
return nil, errors.Wrapf(err, "failed to encode value")
}
return node, nil
}
func (e *Encoder) encodeDocument(doc []byte) (ast.Node, error) { func (e *Encoder) encodeDocument(doc []byte) (ast.Node, error) {
f, err := parser.ParseBytes(doc, 0) f, err := parser.ParseBytes(doc, 0)
if err != nil { if err != nil {