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

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

package structs

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

func init() {
	internal.Register("struct", pkg)
}

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

var pkg = &internal.Package{
	Native: []*internal.Builtin{{
		Name:   "MinFields",
		Params: []adt.Kind{adt.StructKind, adt.IntKind},
		Result: adt.BoolKind,
		Func: func(c *internal.CallCtxt) {
			object, n := c.Struct(0), c.Int(1)
			if c.Do() {
				c.Ret, c.Err = MinFields(object, n)
			}
		},
	}, {
		Name:   "MaxFields",
		Params: []adt.Kind{adt.StructKind, adt.IntKind},
		Result: adt.BoolKind,
		Func: func(c *internal.CallCtxt) {
			object, n := c.Struct(0), c.Int(1)
			if c.Do() {
				c.Ret, c.Err = MaxFields(object, n)
			}
		},
	}},
}
