// This file was auto-generated by the veyron vdl tool.
// Source: profile.vdl

// Package profile contains implementation and internal interfaces and
// types used by the implementation of Veyron profiles.
package profile

import (
	"v.io/core/veyron2/services/mgmt/build"

	// The non-user imports are prefixed with "__" to prevent collisions.
	__vdl "v.io/core/veyron2/vdl"
)

// Library describes a shared library that applications may use.
type Library struct {
	// Name is the name of the library.
	Name string
	// MajorVersion is the major version of the library.
	MajorVersion string
	// MinorVersion is the minor version of the library.
	MinorVersion string
}

func (Library) __VDLReflect(struct {
	Name string "v.io/core/veyron/services/mgmt/profile.Library"
}) {
}

// Specification is how we represent a profile internally. It should
// provide enough information to allow matching of binaries to devices.
type Specification struct {
	// Arch is the target hardware architecture of the profile.
	Arch build.Architecture
	// Description is a human-friendly description of the profile.
	Description string
	// Format is the file format supported by the profile.
	Format build.Format
	// Libraries is a set of libraries the profile requires.
	Libraries map[Library]struct{}
	// Label is a human-friendly concise label for the profile,
	// e.g. "linux-media".
	Label string
	// OS is the target operating system of the profile.
	OS build.OperatingSystem
}

func (Specification) __VDLReflect(struct {
	Name string "v.io/core/veyron/services/mgmt/profile.Specification"
}) {
}

func init() {
	__vdl.Register(Library{})
	__vdl.Register(Specification{})
}
