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

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

package csv

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

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

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

var pkg = &internal.Package{
	Native: []*internal.Builtin{{
		Name:   "Encode",
		Params: []adt.Kind{adt.TopKind},
		Result: adt.StringKind,
		Func: func(c *internal.CallCtxt) {
			x := c.Value(0)
			if c.Do() {
				c.Ret, c.Err = Encode(x)
			}
		},
	}, {
		Name:   "Decode",
		Params: []adt.Kind{adt.BytesKind | adt.StringKind},
		Result: adt.ListKind,
		Func: func(c *internal.CallCtxt) {
			r := c.Reader(0)
			if c.Do() {
				c.Ret, c.Err = Decode(r)
			}
		},
	}},
}
