// Code generated by gocode.Generate; DO NOT EDIT.

package filetypes

import (
	"fmt"

	"cuelang.org/go/cue"
	"cuelang.org/go/encoding/gocode/gocodec"
)

var cuegenvalFileInfo = cuegenMake("FileInfo", &FileInfo{})

// Validate validates x.
func (x *FileInfo) Validate() error {
	return cuegenCodec.Validate(cuegenvalFileInfo, x)
}

var cuegenCodec, cuegenInstance = func() (*gocodec.Codec, *cue.Instance) {
	var r *cue.Runtime
	r = &cue.Runtime{}
	instances, err := r.Unmarshal(cuegenInstanceData)
	if err != nil {
		panic(err)
	}
	if len(instances) != 1 {
		panic("expected encoding of exactly one instance")
	}
	return gocodec.New(r, nil), instances[0]
}()

// cuegenMake is called in the init phase to initialize CUE values for
// validation functions.
func cuegenMake(name string, x interface{}) cue.Value {
	f, err := cuegenInstance.LookupField(name)
	if err != nil {
		panic(fmt.Errorf("could not find type %q in instance", name))
	}
	v := f.Value
	if x != nil {
		w, err := cuegenCodec.ExtractType(x)
		if err != nil {
			panic(err)
		}
		v = v.Unify(w)
	}
	return v
}

// Data size: 1097 bytes.
var cuegenInstanceData = []byte("\x01\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xd4WO\x8b\xdc6\x14\xb7f\xb7P\xa9i\xfa\t\n\xae\x0ea3\u0439\x16\x06\xc2^\xd2@.\xa5\xf4\xba\x84Ek\xcb^7\x1e\xc9\xd82\xec\u0499C\xdb4\xed\xe7\xed\a\u0214\xa7'\u0656\xec\xd9%9\x14\xa2\x93\xf5{z\xff\x9f\x9e\x9e\xbf>\xfe\xbd\"\xab\xe3?\t9\xfe\x91$?\x1c\u007f?#\xe4I\xa5:#T&_\n#\x00'g\xe4\xfc\x17\xad\rY%\xe4\xfcgan\u0253\x84|\xf1\xaa\xaaeG\x8e\xef\x93$\xf9\xf6\xf8\u05ca\x90\xa7Wo\xb2^n\x8a\xaav\x9c\xef\x13r|\x97$\x17\xc7?\xcf\b\xf9r\xc4\xdf%dE\xce\u007f\x12;\t\x82\xce-\u0212$\xf9\xf0\xcdW`\t!+B\xa8\xb9od\xb7\xc9zI><\xfd\xb7\x11\xd9[Q\xca\xf4\xa6\xaf\xea\x9c1P\x9dn\xb7\xe9o\x8c\x82T%vr\x9b\xba\u0559\xb6R%\xa3Re:\xafT9\x10~t\x00\xa3\x952\xb2mZi\x84\xa9\xb4\xba\u0726\xaf\x03\x80\xd1B\xb7\xbb\u02c11M\xd3W\xba\xdd1jD\xd9]Z\xad\xf4\n\u057c\xd9\x0e\xfa\x0e\xec\xc0\xbc\n\xb0\r\xd7w/8g\xa1x :&\x10;\x9e\x9dX\x0f\x9a\xac\"#\xef\fj\x1c\xfd\xe1\x00rF\xad\x99\xc8\xccsa\x04\a#(|!\a\x92'\xa4\xac\x973YY/\x91\xd8e\xb7r\x17r\"\x84\xe4_;\xadf\xcc\x00\x029}\x96^\xacG\xc65\xe7\xe9~T\x9c\xee-_\x18u8\x05\xecNG\xbaO\xaf\x03\x8fp\xad\xf9H\xe7E\xa5D\r\x02\x9f\xa39\xf5\xa2=5\xda{/vs:\x80H.uL\xc4\xc53\x9dC@f\xd6r\x00\x87\xb4PZ\v+\xb1\u0500\x1f\xac\u0326\xd5f&\x96[\x14\x95Z\a\x82\b\x0f.1Z\xb6\xa2\xb9\r\x88\x16\xf1I-\xa3\x9c\x96.\xa5:\x9f\xe5\xf4\x93<\xf1e\xec|\x19S\xb3,\x1d\x93\xe7\xd36S1\u026c\x15\xa7\x1b\xa9DS}\x92,\xc7\xcb\U0004af54\x85\xe8k\x03\xb7\xc6v\x81ga\x13X\xf3\xefA\x90\xf3\xe6`;\xc5kUh\xd7-\xf0r\f\xd5e\xda^\xa6\xfb\xb4\x10u'\x19me![\xa92\xd9m\xe7\xc4\xec>\xab\x91\xb0\xc0\x99\u02e2R\x15\xd8\v'n\xb4\xae\xc1e\xd8C\xbea!\x96i\u0559VT\u028c\xe7\xdeJ\xd98\xa7\xba\xad\xc3*\x95\xe9]SKc\u06da\xc3v\x8dn\x8d\xb7\x00\xb1\u03b4R\f\x17\x06\xb1\\g\xdd\xe8\"b\u0098\xb6\xba\xe9\r:\xe0l_;\xe3!D\xec\xc0v:\x97X\x12\x95jz\xd7t&\u0476\xb52\xa6nm;\x87\xcb\x19\xddl6X:4\n8u\xf6D\x01\x9brx\x99\xbe\x1e\x87.E\xe9\x1a\u02bd\xdb`%y]\a_\xa4\aL\xbe\xbc\x83\xc0<n\xef\xb4\xc8\x1e78\n\xd2\xc7\x19\fev\xca\\\xdd7\u0187\xf7\xff\u059d\xcb\xe2s\xc8+\vY\aF_\xeeN\xd9\xe0\xd6\xf86\xf9\x13\x18\xbatoC\xc9\xe8p)\xbc\x99c\xa8&b\xc6'#P\x04\x99pb\x90\xcd\xf6\xe5H}\xc4\x18\x9c\x8f\u050cOz\xe4\u03c9\xe3z\u046aS\xc7\x1f~\x84\xe84\xf0\x13\xae\xf1\x19YV2a`\x16\xb1\x87\xaf`\x84{1LB\xbeD\xbcP\u03b7\xe9\xb5\xdf\xcc\u01cb\a\xdex\xf8\xf2\xaf_\xd4\\\xe3\x82\v\xdb\xecE@~n\xe7\x92\x00a4j\u00b1\xbc\xb0\x1d\xc7\u05301\u03e8A\x8b\x8e\xa9a\xb3\x8e\xee\xf8\x90\x89\u064c\xe0\xd70+D./\x1b~2}\xa8e6l\x8c\xc9\xc0\xb8\xe3\xfcVN\xe7\xb8\xe8\xf1\xf47+\xc8\xcerV<\x1aF\xfea\xc3\xc3H/G8\x8e]4%\xd9\xe9{(#\xff\x80\x87\x91\x89\xefr<=\x8fc<\x8e\\\xe1\x90086\x1d\x0e\x16c\xb0\x18\x82E\xaf\xe2\xdb\xed~-\u4751\xaa\xc30\xbb\xbb\xe5\xd65\xa3\x1c\xfe\x93\x10\x81\xc1\x0ev\x00\xda\x17o\xebA\xd8y\xb4\x06x@k\x80\xeb\xdc\x1d\x0fa\xb5\f\xdbIz\x10\r;\x8b:0D\u035d\x99\xa0\xd0\xfe\x00-\xb5s\xc1\xa2\xa5\x06\f\u06d47\xcd\xee\xa0\xe1T\xb5\x1c\xbbK<\xf1\xf1B\xeb\x8d\xfb\x11\x99\xfc\x10\xf9\xe9\xf3\xc0\u0081\xf2\xe3;\xd7\xe9Q8\x9c)N\\\xb5\x13\xa3\xef#\xbc,I\xfe\v\x00\x00\xff\xff\xf1\xf9\xbd5\x9b\x0f\x00\x00")
