// Code generated by go generate. DO NOT EDIT.

//go:generate rm pkg.go
//go:generate go run ../../gen/gen.go

package yaml

import (
	"cuelang.org/go/internal/core/adt"
	"cuelang.org/go/pkg/internal"
)

func init() {
	internal.Register("encoding/yaml", pkg)
}

var _ = adt.TopKind // in case the adt package isn't used

var pkg = &internal.Package{
	Native: []*internal.Builtin{{
		Name:   "Marshal",
		Params: []adt.Kind{adt.TopKind},
		Result: adt.StringKind,
		Func: func(c *internal.CallCtxt) {
			v := c.Value(0)
			if c.Do() {
				c.Ret, c.Err = Marshal(v)
			}
		},
	}, {
		Name:   "MarshalStream",
		Params: []adt.Kind{adt.TopKind},
		Result: adt.StringKind,
		Func: func(c *internal.CallCtxt) {
			v := c.Value(0)
			if c.Do() {
				c.Ret, c.Err = MarshalStream(v)
			}
		},
	}, {
		Name:   "Unmarshal",
		Params: []adt.Kind{adt.BytesKind | adt.StringKind},
		Result: adt.TopKind,
		Func: func(c *internal.CallCtxt) {
			data := c.Bytes(0)
			if c.Do() {
				c.Ret, c.Err = Unmarshal(data)
			}
		},
	}, {
		Name:   "Validate",
		Params: []adt.Kind{adt.BytesKind | adt.StringKind, adt.TopKind},
		Result: adt.BoolKind,
		Func: func(c *internal.CallCtxt) {
			b, v := c.Bytes(0), c.Value(1)
			if c.Do() {
				c.Ret, c.Err = Validate(b, v)
			}
		},
	}, {
		Name:   "ValidatePartial",
		Params: []adt.Kind{adt.BytesKind | adt.StringKind, adt.TopKind},
		Result: adt.BoolKind,
		Func: func(c *internal.CallCtxt) {
			b, v := c.Bytes(0), c.Value(1)
			if c.Do() {
				c.Ret, c.Err = ValidatePartial(b, v)
			}
		},
	}},
}
