// 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: 1107 bytes.
var cuegenInstanceData = []byte("\x01\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xd4WQ\x8b\xdc6\x10\xb66W\xa8D\xda\xfc\x82\x82\xab\x87pY\xe8\xbe\x16\x16\u00bd\xa4\x81\xbc\x94\xd2\xd7#\x1c:[\xf6\xb9\xf1J\u0196\xcb\x1d\xdd}h\x9a\xa6\xfd\x0f\xfd\xaf\xd92\x1a\u0276d\xef\x1dIK\xa1~\xb2\xbf\xd1\xcc|\x9a\x19i\xc6_\x1c\xffX\x91\xd5\xf1\u03c4\x1c\xdf&\u0277\xc7_\x1f\x11\xf2\xb8R\x9d\x11*\x93/\x84\x11\x80\x93G\xe4\xecG\xad\rY%\xe4\xec\aan\xc8\xe3\x84|\xf6\xb2\xaaeG\x8e\xef\x93$\xf9\xea\xf8\xfb\x8a\x90//_g\xbd\xdc\x14U\xed4\xdf'\xe4\xf8.I\u038f\xbf=\"\xe4\xf3\x11\u007f\x97\x90\x159\xfb^\xec$\x18:\xb3 K\x92\xe4\u00d3\xbf\x80\t!+B\xa8\xb9kd\xb7\xc9zI><y\u06c8\xec\x8d(ez\xddWu\xce\x18\xb8N\xb7\xdb\xf4\x17F\xc1\xaa\x12;\xb9M\xdd\u04d9\xb6R%\xa3Re:\xafT9\b\xbes\x00\xa3\x952\xb2mZi\x84\xa9\xb4\xba\u0626\xaf\x02\x80\xd1B\xb7\xbb\x8bA1M\u04d7\xba\xdd1jD\xd9]X\xaf\xf4\x12\u077c\xde\x0e\xfe\x0e\xec\xc0\xbc\v\xe0\x86\xcf\xd7\xcf9g\xa1y\x10:%0;\xae\x9d\xb0\aO\u0591\x91\xb7\x06=\x8e\xfb\xe1\x00rF-MT\xe6\xb90\x82\x03\t\no\xa8\x81\xe2\x89(\xeb\xe5\xccV\xd6K\x14v\u064d\u0705\x9a\b\xa1\xf8\xa7N\xab\x992\x80 N\x9f\xa6\xe7\xebQq\xcdy\xba\x1f\x1d\xa7{\xab\x17F\x1dV\x81\xba\xf3\x91\xee\u04eb`G\xf8\xac\xf9(\xe7E\xa5D\r\x06\x9f!\x9dz\x91O\x8d|\xef\xc4n.\a\x10\u0165\x8e\x85\xf8\xf0L\xe7\x10\x90\x19[\x0e\xe0\x90\x16Jka-\x96\x1a\xf0\x83\xb5\u0674\xda\xcc\xccr\x8b:\xa7\xadhn\x82\b[\xc4\u7b4c\xd2V\xba\xac\xe9|\x96\xb6O\"\xeb+\xd5\xd1\x1d\xa3\xbfl\x1d\xf3\xe333s1I\x9e5\xa7\x1b\xa9DS}\x92-\xa7\xcb\xf1\x14\xbd\x90\x85\xe8k\x03\a\xc3\x1e\xf4\xa7\xe19_\xf3o\xc0\x90\xdb\xcd\xc1^\x06\xafT\xa1\u0745\x80\xf5?\x14\x90i{\x99\xee\xd3B\u051dd\xb4\x95\x85l\xa5\xcad\xb7\x9d\v\xb3\xbb\xacF\xc1\x82f.\x8bJU\xc0\x17V\\k]\u00d6\xe1[\u0528\x82X\xa6UgZQ)3\xae{#e\xe36\xd5m\x1dV\xa9L\xef\x9aZ\x1a{s9l\xd7\xe8\xd6x\x06\x88u\xa6\x95b8\x13\x88\xe5:\xeb\xc6-\"&\x8ci\xab\xeb\xde\xe0\x06\x1c\xf7\xb5#\x0f!b\a\xb6\u04f9\u0112\xa8T\u04fb{e\x12m[+c\xea\xd6\xf6rp9\xa3\x9b\xcd\x06K\x87F\x01\xa7\x8eO\x14\xb0\xa9\x86\xb7\xe9\xebq\xb8\x88(]C\xb9w\x1b\xac$\xef\xeb\xe0\x8b\xf4\x80\u0257\xb7\x10\x98\x87\xf9N\x8b\xeca\xc2Q\x90>\x8e0\x94\xd9)\xba\xbao\x8c\x0f\xef\u007f\xed[\xfe,\xea\u007f9\xb1\xff\x88\xab\xbd\xb4O\x91\xcde\xf1\u007f(B\x16\xaa\x0e\x8a\xfel:g\u00f6\xc6^\xe9W`\xec\u04bd\x8d%\xa3\xc3\t\xf64\u01fcN\u030c-,p\x04\xa9pfP\xcd6\x91\xc8}\xa4\x18\xac\x8f\u070c#F\xb4\x9f\x13\xcb\xf5\"\xabS\xcb\xefo\x8at\x1a\xf8\x89\xd6\xd8\xf3\x96\x9dL\x14\x98E\xec\xe2K\x18)\x9f\x0f\x93\x99/\x11o\x94\xf3mz\xe5?\xe6\xe3\xce=3\a\xbc\xf9V\x1du\x82\xb8\xe0\u009ep\x1e\x88\x9f\xd99)@\x18\x8d:Fl/\xec\x1d\xb14\xec\"3i\xd0Obi\xd8Y\xa2C>d\xc2\x06`)L\xc38\x16my\x99\xf8\xc9\xf4\xa1\x97\xd9d4&\x03\xe3\x8e\xf3d9\x9d+\xa3N\xefOV\x90\x9d\xe5\xacx4\x8c\xfc\xfd\xc4\xc3H/G8\x8e]4\xd2\u067f\x81\xa1\x8c\xfc\xb4\x11F&>\xcb\xf14?\xfeV\xe0|\x18N4\xc3\u01a6\x93\xccb\f\x16C\xb0\xb8\xab\xf8t\xbb_\x1dyk\xa4\xea0\xcc\xeel\xb9\xe7\x8aQ\x0e\xffm\x88\xc0\x14\n_\x00\xda\xf6\xbc\xf5 |y\xb4\x06x@k\x80\xeb\xdc-\x0fa\xb5\f\xdb\xc9~0\r_\x16u`\x88\x9a[3A\xe1\xfa\x03\xb4\xd4n\v\x16-5`xMyj\xf6\v.\x9c\xaa\x96\xe3\xed\x12\x8f\xa7\xbc\xd0z\xe3~\x8c&?h~T>\xb0p\xfa\xfd\xf8\x9b\xeb\xf4\xdc\x1e\x0e@'\x8e\u06899\xfd\x01]\x96$\u007f\a\x00\x00\xff\xff\x14\xd0\xf53+\x10\x00\x00")
