// Code generated by protoc-gen-go. DO NOT EDIT.
// source: prototype/design.proto

package prototype

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type DesignOptions_Fingerprint_Location int32

const (
	DesignOptions_Fingerprint_FINGERPRINT_LOCATION_UNKNOWN DesignOptions_Fingerprint_Location = 0
	DesignOptions_Fingerprint_POWER_BUTTON_TOP_LEFT        DesignOptions_Fingerprint_Location = 1
	DesignOptions_Fingerprint_KEYBOARD_TOP_RIGHT           DesignOptions_Fingerprint_Location = 2
	DesignOptions_Fingerprint_KEYBOARD_BOTTOM_RIGHT        DesignOptions_Fingerprint_Location = 3
)

var DesignOptions_Fingerprint_Location_name = map[int32]string{
	0: "FINGERPRINT_LOCATION_UNKNOWN",
	1: "POWER_BUTTON_TOP_LEFT",
	2: "KEYBOARD_TOP_RIGHT",
	3: "KEYBOARD_BOTTOM_RIGHT",
}

var DesignOptions_Fingerprint_Location_value = map[string]int32{
	"FINGERPRINT_LOCATION_UNKNOWN": 0,
	"POWER_BUTTON_TOP_LEFT":        1,
	"KEYBOARD_TOP_RIGHT":           2,
	"KEYBOARD_BOTTOM_RIGHT":        3,
}

func (x DesignOptions_Fingerprint_Location) String() string {
	return proto.EnumName(DesignOptions_Fingerprint_Location_name, int32(x))
}

func (DesignOptions_Fingerprint_Location) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8c60c33a46259324, []int{3, 1, 0}
}

type DesignOptions_Stylus_Category int32

const (
	DesignOptions_Stylus_STYLUS_CATEGORY_UNKNOWN DesignOptions_Stylus_Category = 0
	DesignOptions_Stylus_INTERNAL                DesignOptions_Stylus_Category = 1
	DesignOptions_Stylus_EXTERNAL                DesignOptions_Stylus_Category = 2
)

var DesignOptions_Stylus_Category_name = map[int32]string{
	0: "STYLUS_CATEGORY_UNKNOWN",
	1: "INTERNAL",
	2: "EXTERNAL",
}

var DesignOptions_Stylus_Category_value = map[string]int32{
	"STYLUS_CATEGORY_UNKNOWN": 0,
	"INTERNAL":                1,
	"EXTERNAL":                2,
}

func (x DesignOptions_Stylus_Category) String() string {
	return proto.EnumName(DesignOptions_Stylus_Category_name, int32(x))
}

func (DesignOptions_Stylus_Category) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8c60c33a46259324, []int{3, 2, 0}
}

type Design_FormFactor int32

const (
	Design_FORM_FACTOR_UNDEFINED Design_FormFactor = 0
	Design_CLAMSHELL             Design_FormFactor = 1
	Design_CONVERTIBLE           Design_FormFactor = 2
	Design_DETACHABLE            Design_FormFactor = 3
	Design_CHROMEBASE            Design_FormFactor = 4
	Design_CHROMEBOX             Design_FormFactor = 5
	Design_CHROMEBIT             Design_FormFactor = 6
	Design_CHROMESLATE           Design_FormFactor = 7
)

var Design_FormFactor_name = map[int32]string{
	0: "FORM_FACTOR_UNDEFINED",
	1: "CLAMSHELL",
	2: "CONVERTIBLE",
	3: "DETACHABLE",
	4: "CHROMEBASE",
	5: "CHROMEBOX",
	6: "CHROMEBIT",
	7: "CHROMESLATE",
}

var Design_FormFactor_value = map[string]int32{
	"FORM_FACTOR_UNDEFINED": 0,
	"CLAMSHELL":             1,
	"CONVERTIBLE":           2,
	"DETACHABLE":            3,
	"CHROMEBASE":            4,
	"CHROMEBOX":             5,
	"CHROMEBIT":             6,
	"CHROMESLATE":           7,
}

func (x Design_FormFactor) String() string {
	return proto.EnumName(Design_FormFactor_name, int32(x))
}

func (Design_FormFactor) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8c60c33a46259324, []int{4, 0}
}

type ProgramId struct {
	Value                string   `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ProgramId) Reset()         { *m = ProgramId{} }
func (m *ProgramId) String() string { return proto.CompactTextString(m) }
func (*ProgramId) ProtoMessage()    {}
func (*ProgramId) Descriptor() ([]byte, []int) {
	return fileDescriptor_8c60c33a46259324, []int{0}
}

func (m *ProgramId) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ProgramId.Unmarshal(m, b)
}
func (m *ProgramId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ProgramId.Marshal(b, m, deterministic)
}
func (m *ProgramId) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ProgramId.Merge(m, src)
}
func (m *ProgramId) XXX_Size() int {
	return xxx_messageInfo_ProgramId.Size(m)
}
func (m *ProgramId) XXX_DiscardUnknown() {
	xxx_messageInfo_ProgramId.DiscardUnknown(m)
}

var xxx_messageInfo_ProgramId proto.InternalMessageInfo

func (m *ProgramId) GetValue() string {
	if m != nil {
		return m.Value
	}
	return ""
}

type DesignId struct {
	Value                string   `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *DesignId) Reset()         { *m = DesignId{} }
func (m *DesignId) String() string { return proto.CompactTextString(m) }
func (*DesignId) ProtoMessage()    {}
func (*DesignId) Descriptor() ([]byte, []int) {
	return fileDescriptor_8c60c33a46259324, []int{1}
}

func (m *DesignId) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DesignId.Unmarshal(m, b)
}
func (m *DesignId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DesignId.Marshal(b, m, deterministic)
}
func (m *DesignId) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DesignId.Merge(m, src)
}
func (m *DesignId) XXX_Size() int {
	return xxx_messageInfo_DesignId.Size(m)
}
func (m *DesignId) XXX_DiscardUnknown() {
	xxx_messageInfo_DesignId.DiscardUnknown(m)
}

var xxx_messageInfo_DesignId proto.InternalMessageInfo

func (m *DesignId) GetValue() string {
	if m != nil {
		return m.Value
	}
	return ""
}

type DesignVariantId struct {
	Value                string   `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *DesignVariantId) Reset()         { *m = DesignVariantId{} }
func (m *DesignVariantId) String() string { return proto.CompactTextString(m) }
func (*DesignVariantId) ProtoMessage()    {}
func (*DesignVariantId) Descriptor() ([]byte, []int) {
	return fileDescriptor_8c60c33a46259324, []int{2}
}

func (m *DesignVariantId) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DesignVariantId.Unmarshal(m, b)
}
func (m *DesignVariantId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DesignVariantId.Marshal(b, m, deterministic)
}
func (m *DesignVariantId) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DesignVariantId.Merge(m, src)
}
func (m *DesignVariantId) XXX_Size() int {
	return xxx_messageInfo_DesignVariantId.Size(m)
}
func (m *DesignVariantId) XXX_DiscardUnknown() {
	xxx_messageInfo_DesignVariantId.DiscardUnknown(m)
}

var xxx_messageInfo_DesignVariantId proto.InternalMessageInfo

func (m *DesignVariantId) GetValue() string {
	if m != nil {
		return m.Value
	}
	return ""
}

type DesignOptions struct {
	Fingerprint          *DesignOptions_Fingerprint `protobuf:"bytes,1,opt,name=fingerprint,proto3" json:"fingerprint,omitempty"`
	FrontCamera          *DesignOptions_Feature     `protobuf:"bytes,2,opt,name=front_camera,json=frontCamera,proto3" json:"front_camera,omitempty"`
	RearCamera           *DesignOptions_Feature     `protobuf:"bytes,3,opt,name=rear_camera,json=rearCamera,proto3" json:"rear_camera,omitempty"`
	BaseAccelerometer    *DesignOptions_Feature     `protobuf:"bytes,4,opt,name=base_accelerometer,json=baseAccelerometer,proto3" json:"base_accelerometer,omitempty"`
	LidAccelerometer     *DesignOptions_Feature     `protobuf:"bytes,5,opt,name=lid_accelerometer,json=lidAccelerometer,proto3" json:"lid_accelerometer,omitempty"`
	BaseGyroscope        *DesignOptions_Feature     `protobuf:"bytes,6,opt,name=base_gyroscope,json=baseGyroscope,proto3" json:"base_gyroscope,omitempty"`
	LidGyroscope         *DesignOptions_Feature     `protobuf:"bytes,7,opt,name=lid_gyroscope,json=lidGyroscope,proto3" json:"lid_gyroscope,omitempty"`
	BaseMagnetometer     *DesignOptions_Feature     `protobuf:"bytes,8,opt,name=base_magnetometer,json=baseMagnetometer,proto3" json:"base_magnetometer,omitempty"`
	LidMagnetometer      *DesignOptions_Feature     `protobuf:"bytes,9,opt,name=lid_magnetometer,json=lidMagnetometer,proto3" json:"lid_magnetometer,omitempty"`
	BaseLightSensor      *DesignOptions_Feature     `protobuf:"bytes,10,opt,name=base_light_sensor,json=baseLightSensor,proto3" json:"base_light_sensor,omitempty"`
	LidLightSensor       *DesignOptions_Feature     `protobuf:"bytes,11,opt,name=lid_light_sensor,json=lidLightSensor,proto3" json:"lid_light_sensor,omitempty"`
	Touchscreen          *DesignOptions_Feature     `protobuf:"bytes,12,opt,name=touchscreen,proto3" json:"touchscreen,omitempty"`
	Stylus               *DesignOptions_Stylus      `protobuf:"bytes,13,opt,name=stylus,proto3" json:"stylus,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
	XXX_unrecognized     []byte                     `json:"-"`
	XXX_sizecache        int32                      `json:"-"`
}

func (m *DesignOptions) Reset()         { *m = DesignOptions{} }
func (m *DesignOptions) String() string { return proto.CompactTextString(m) }
func (*DesignOptions) ProtoMessage()    {}
func (*DesignOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_8c60c33a46259324, []int{3}
}

func (m *DesignOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DesignOptions.Unmarshal(m, b)
}
func (m *DesignOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DesignOptions.Marshal(b, m, deterministic)
}
func (m *DesignOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DesignOptions.Merge(m, src)
}
func (m *DesignOptions) XXX_Size() int {
	return xxx_messageInfo_DesignOptions.Size(m)
}
func (m *DesignOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_DesignOptions.DiscardUnknown(m)
}

var xxx_messageInfo_DesignOptions proto.InternalMessageInfo

func (m *DesignOptions) GetFingerprint() *DesignOptions_Fingerprint {
	if m != nil {
		return m.Fingerprint
	}
	return nil
}

func (m *DesignOptions) GetFrontCamera() *DesignOptions_Feature {
	if m != nil {
		return m.FrontCamera
	}
	return nil
}

func (m *DesignOptions) GetRearCamera() *DesignOptions_Feature {
	if m != nil {
		return m.RearCamera
	}
	return nil
}

func (m *DesignOptions) GetBaseAccelerometer() *DesignOptions_Feature {
	if m != nil {
		return m.BaseAccelerometer
	}
	return nil
}

func (m *DesignOptions) GetLidAccelerometer() *DesignOptions_Feature {
	if m != nil {
		return m.LidAccelerometer
	}
	return nil
}

func (m *DesignOptions) GetBaseGyroscope() *DesignOptions_Feature {
	if m != nil {
		return m.BaseGyroscope
	}
	return nil
}

func (m *DesignOptions) GetLidGyroscope() *DesignOptions_Feature {
	if m != nil {
		return m.LidGyroscope
	}
	return nil
}

func (m *DesignOptions) GetBaseMagnetometer() *DesignOptions_Feature {
	if m != nil {
		return m.BaseMagnetometer
	}
	return nil
}

func (m *DesignOptions) GetLidMagnetometer() *DesignOptions_Feature {
	if m != nil {
		return m.LidMagnetometer
	}
	return nil
}

func (m *DesignOptions) GetBaseLightSensor() *DesignOptions_Feature {
	if m != nil {
		return m.BaseLightSensor
	}
	return nil
}

func (m *DesignOptions) GetLidLightSensor() *DesignOptions_Feature {
	if m != nil {
		return m.LidLightSensor
	}
	return nil
}

func (m *DesignOptions) GetTouchscreen() *DesignOptions_Feature {
	if m != nil {
		return m.Touchscreen
	}
	return nil
}

func (m *DesignOptions) GetStylus() *DesignOptions_Stylus {
	if m != nil {
		return m.Stylus
	}
	return nil
}

// General feature presense proto that can be used
// for any features that don't have specific attributes.
// E.g. See Fingerprint below
type DesignOptions_Feature struct {
	Presence             Presence_Indicator `protobuf:"varint,1,opt,name=presence,proto3,enum=prototype.Presence_Indicator" json:"presence,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *DesignOptions_Feature) Reset()         { *m = DesignOptions_Feature{} }
func (m *DesignOptions_Feature) String() string { return proto.CompactTextString(m) }
func (*DesignOptions_Feature) ProtoMessage()    {}
func (*DesignOptions_Feature) Descriptor() ([]byte, []int) {
	return fileDescriptor_8c60c33a46259324, []int{3, 0}
}

func (m *DesignOptions_Feature) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DesignOptions_Feature.Unmarshal(m, b)
}
func (m *DesignOptions_Feature) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DesignOptions_Feature.Marshal(b, m, deterministic)
}
func (m *DesignOptions_Feature) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DesignOptions_Feature.Merge(m, src)
}
func (m *DesignOptions_Feature) XXX_Size() int {
	return xxx_messageInfo_DesignOptions_Feature.Size(m)
}
func (m *DesignOptions_Feature) XXX_DiscardUnknown() {
	xxx_messageInfo_DesignOptions_Feature.DiscardUnknown(m)
}

var xxx_messageInfo_DesignOptions_Feature proto.InternalMessageInfo

func (m *DesignOptions_Feature) GetPresence() Presence_Indicator {
	if m != nil {
		return m.Presence
	}
	return Presence_PRESENCE_UNKNOWN
}

type DesignOptions_Fingerprint struct {
	Presence             Presence_Indicator                 `protobuf:"varint,1,opt,name=presence,proto3,enum=prototype.Presence_Indicator" json:"presence,omitempty"`
	Location             DesignOptions_Fingerprint_Location `protobuf:"varint,2,opt,name=location,proto3,enum=prototype.DesignOptions_Fingerprint_Location" json:"location,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
	XXX_unrecognized     []byte                             `json:"-"`
	XXX_sizecache        int32                              `json:"-"`
}

func (m *DesignOptions_Fingerprint) Reset()         { *m = DesignOptions_Fingerprint{} }
func (m *DesignOptions_Fingerprint) String() string { return proto.CompactTextString(m) }
func (*DesignOptions_Fingerprint) ProtoMessage()    {}
func (*DesignOptions_Fingerprint) Descriptor() ([]byte, []int) {
	return fileDescriptor_8c60c33a46259324, []int{3, 1}
}

func (m *DesignOptions_Fingerprint) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DesignOptions_Fingerprint.Unmarshal(m, b)
}
func (m *DesignOptions_Fingerprint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DesignOptions_Fingerprint.Marshal(b, m, deterministic)
}
func (m *DesignOptions_Fingerprint) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DesignOptions_Fingerprint.Merge(m, src)
}
func (m *DesignOptions_Fingerprint) XXX_Size() int {
	return xxx_messageInfo_DesignOptions_Fingerprint.Size(m)
}
func (m *DesignOptions_Fingerprint) XXX_DiscardUnknown() {
	xxx_messageInfo_DesignOptions_Fingerprint.DiscardUnknown(m)
}

var xxx_messageInfo_DesignOptions_Fingerprint proto.InternalMessageInfo

func (m *DesignOptions_Fingerprint) GetPresence() Presence_Indicator {
	if m != nil {
		return m.Presence
	}
	return Presence_PRESENCE_UNKNOWN
}

func (m *DesignOptions_Fingerprint) GetLocation() DesignOptions_Fingerprint_Location {
	if m != nil {
		return m.Location
	}
	return DesignOptions_Fingerprint_FINGERPRINT_LOCATION_UNKNOWN
}

type DesignOptions_Stylus struct {
	Presence             Presence_Indicator            `protobuf:"varint,1,opt,name=presence,proto3,enum=prototype.Presence_Indicator" json:"presence,omitempty"`
	Category             DesignOptions_Stylus_Category `protobuf:"varint,2,opt,name=category,proto3,enum=prototype.DesignOptions_Stylus_Category" json:"category,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
	XXX_unrecognized     []byte                        `json:"-"`
	XXX_sizecache        int32                         `json:"-"`
}

func (m *DesignOptions_Stylus) Reset()         { *m = DesignOptions_Stylus{} }
func (m *DesignOptions_Stylus) String() string { return proto.CompactTextString(m) }
func (*DesignOptions_Stylus) ProtoMessage()    {}
func (*DesignOptions_Stylus) Descriptor() ([]byte, []int) {
	return fileDescriptor_8c60c33a46259324, []int{3, 2}
}

func (m *DesignOptions_Stylus) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DesignOptions_Stylus.Unmarshal(m, b)
}
func (m *DesignOptions_Stylus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DesignOptions_Stylus.Marshal(b, m, deterministic)
}
func (m *DesignOptions_Stylus) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DesignOptions_Stylus.Merge(m, src)
}
func (m *DesignOptions_Stylus) XXX_Size() int {
	return xxx_messageInfo_DesignOptions_Stylus.Size(m)
}
func (m *DesignOptions_Stylus) XXX_DiscardUnknown() {
	xxx_messageInfo_DesignOptions_Stylus.DiscardUnknown(m)
}

var xxx_messageInfo_DesignOptions_Stylus proto.InternalMessageInfo

func (m *DesignOptions_Stylus) GetPresence() Presence_Indicator {
	if m != nil {
		return m.Presence
	}
	return Presence_PRESENCE_UNKNOWN
}

func (m *DesignOptions_Stylus) GetCategory() DesignOptions_Stylus_Category {
	if m != nil {
		return m.Category
	}
	return DesignOptions_Stylus_STYLUS_CATEGORY_UNKNOWN
}

type Design struct {
	Id                   *DesignId         `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	ProgramId            *ProgramId        `protobuf:"bytes,2,opt,name=program_id,json=programId,proto3" json:"program_id,omitempty"`
	OdmId                *PartnerId        `protobuf:"bytes,3,opt,name=odm_id,json=odmId,proto3" json:"odm_id,omitempty"`
	Name                 string            `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
	Variants             []*Design_Variant `protobuf:"bytes,6,rep,name=variants,proto3" json:"variants,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *Design) Reset()         { *m = Design{} }
func (m *Design) String() string { return proto.CompactTextString(m) }
func (*Design) ProtoMessage()    {}
func (*Design) Descriptor() ([]byte, []int) {
	return fileDescriptor_8c60c33a46259324, []int{4}
}

func (m *Design) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Design.Unmarshal(m, b)
}
func (m *Design) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Design.Marshal(b, m, deterministic)
}
func (m *Design) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Design.Merge(m, src)
}
func (m *Design) XXX_Size() int {
	return xxx_messageInfo_Design.Size(m)
}
func (m *Design) XXX_DiscardUnknown() {
	xxx_messageInfo_Design.DiscardUnknown(m)
}

var xxx_messageInfo_Design proto.InternalMessageInfo

func (m *Design) GetId() *DesignId {
	if m != nil {
		return m.Id
	}
	return nil
}

func (m *Design) GetProgramId() *ProgramId {
	if m != nil {
		return m.ProgramId
	}
	return nil
}

func (m *Design) GetOdmId() *PartnerId {
	if m != nil {
		return m.OdmId
	}
	return nil
}

func (m *Design) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *Design) GetVariants() []*Design_Variant {
	if m != nil {
		return m.Variants
	}
	return nil
}

type Design_Variant struct {
	Id                   *DesignVariantId  `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	FormFactor           Design_FormFactor `protobuf:"varint,2,opt,name=form_factor,json=formFactor,proto3,enum=prototype.Design_FormFactor" json:"form_factor,omitempty"`
	DesignOptions        *DesignOptions    `protobuf:"bytes,3,opt,name=design_options,json=designOptions,proto3" json:"design_options,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *Design_Variant) Reset()         { *m = Design_Variant{} }
func (m *Design_Variant) String() string { return proto.CompactTextString(m) }
func (*Design_Variant) ProtoMessage()    {}
func (*Design_Variant) Descriptor() ([]byte, []int) {
	return fileDescriptor_8c60c33a46259324, []int{4, 0}
}

func (m *Design_Variant) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Design_Variant.Unmarshal(m, b)
}
func (m *Design_Variant) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Design_Variant.Marshal(b, m, deterministic)
}
func (m *Design_Variant) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Design_Variant.Merge(m, src)
}
func (m *Design_Variant) XXX_Size() int {
	return xxx_messageInfo_Design_Variant.Size(m)
}
func (m *Design_Variant) XXX_DiscardUnknown() {
	xxx_messageInfo_Design_Variant.DiscardUnknown(m)
}

var xxx_messageInfo_Design_Variant proto.InternalMessageInfo

func (m *Design_Variant) GetId() *DesignVariantId {
	if m != nil {
		return m.Id
	}
	return nil
}

func (m *Design_Variant) GetFormFactor() Design_FormFactor {
	if m != nil {
		return m.FormFactor
	}
	return Design_FORM_FACTOR_UNDEFINED
}

func (m *Design_Variant) GetDesignOptions() *DesignOptions {
	if m != nil {
		return m.DesignOptions
	}
	return nil
}

type DesignList struct {
	Value                []*Design `protobuf:"bytes,1,rep,name=value,proto3" json:"value,omitempty"`
	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
	XXX_unrecognized     []byte    `json:"-"`
	XXX_sizecache        int32     `json:"-"`
}

func (m *DesignList) Reset()         { *m = DesignList{} }
func (m *DesignList) String() string { return proto.CompactTextString(m) }
func (*DesignList) ProtoMessage()    {}
func (*DesignList) Descriptor() ([]byte, []int) {
	return fileDescriptor_8c60c33a46259324, []int{5}
}

func (m *DesignList) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DesignList.Unmarshal(m, b)
}
func (m *DesignList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DesignList.Marshal(b, m, deterministic)
}
func (m *DesignList) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DesignList.Merge(m, src)
}
func (m *DesignList) XXX_Size() int {
	return xxx_messageInfo_DesignList.Size(m)
}
func (m *DesignList) XXX_DiscardUnknown() {
	xxx_messageInfo_DesignList.DiscardUnknown(m)
}

var xxx_messageInfo_DesignList proto.InternalMessageInfo

func (m *DesignList) GetValue() []*Design {
	if m != nil {
		return m.Value
	}
	return nil
}

func init() {
	proto.RegisterEnum("prototype.DesignOptions_Fingerprint_Location", DesignOptions_Fingerprint_Location_name, DesignOptions_Fingerprint_Location_value)
	proto.RegisterEnum("prototype.DesignOptions_Stylus_Category", DesignOptions_Stylus_Category_name, DesignOptions_Stylus_Category_value)
	proto.RegisterEnum("prototype.Design_FormFactor", Design_FormFactor_name, Design_FormFactor_value)
	proto.RegisterType((*ProgramId)(nil), "prototype.ProgramId")
	proto.RegisterType((*DesignId)(nil), "prototype.DesignId")
	proto.RegisterType((*DesignVariantId)(nil), "prototype.DesignVariantId")
	proto.RegisterType((*DesignOptions)(nil), "prototype.DesignOptions")
	proto.RegisterType((*DesignOptions_Feature)(nil), "prototype.DesignOptions.Feature")
	proto.RegisterType((*DesignOptions_Fingerprint)(nil), "prototype.DesignOptions.Fingerprint")
	proto.RegisterType((*DesignOptions_Stylus)(nil), "prototype.DesignOptions.Stylus")
	proto.RegisterType((*Design)(nil), "prototype.Design")
	proto.RegisterType((*Design_Variant)(nil), "prototype.Design.Variant")
	proto.RegisterType((*DesignList)(nil), "prototype.DesignList")
}

func init() { proto.RegisterFile("prototype/design.proto", fileDescriptor_8c60c33a46259324) }

var fileDescriptor_8c60c33a46259324 = []byte{
	// 961 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x96, 0xd1, 0x6e, 0xa3, 0x46,
	0x17, 0xc7, 0xd7, 0x4e, 0xe2, 0xd8, 0x87, 0xd8, 0x21, 0xf3, 0xed, 0xb7, 0xeb, 0x75, 0xb7, 0x6a,
	0xea, 0x56, 0xda, 0xa8, 0x55, 0x6d, 0x29, 0x51, 0x54, 0xf5, 0xa2, 0xaa, 0x30, 0xc6, 0x09, 0x0d,
	0x86, 0x68, 0x4c, 0x76, 0x37, 0xbd, 0x41, 0x2c, 0x8c, 0x09, 0x12, 0x30, 0xd6, 0x40, 0x56, 0x4a,
	0x5f, 0xa2, 0x77, 0x7d, 0x89, 0x5e, 0xf7, 0x35, 0xfa, 0x22, 0x7d, 0x89, 0x8a, 0x61, 0x82, 0x71,
	0xad, 0xa8, 0x48, 0x7b, 0xc7, 0x39, 0xfc, 0xff, 0x3f, 0xce, 0x99, 0x81, 0x39, 0xc0, 0x8b, 0x15,
	0xa3, 0x19, 0xcd, 0x1e, 0x56, 0x64, 0xec, 0x93, 0x34, 0x0c, 0x92, 0x11, 0x4f, 0xa0, 0x4e, 0x99,
	0x1f, 0x54, 0x24, 0x1e, 0x8d, 0x63, 0x2a, 0x24, 0x83, 0x97, 0xeb, 0xfc, 0xca, 0x65, 0x59, 0x42,
	0x58, 0x71, 0x63, 0xf8, 0x25, 0x74, 0xae, 0x19, 0x0d, 0x98, 0x1b, 0xeb, 0x3e, 0x7a, 0x0e, 0x7b,
	0x1f, 0xdd, 0xe8, 0x9e, 0xf4, 0x1b, 0xc7, 0x8d, 0x93, 0x0e, 0x2e, 0x82, 0xe1, 0x31, 0xb4, 0xa7,
	0xfc, 0x71, 0x4f, 0x2a, 0xde, 0xc0, 0x61, 0xa1, 0x78, 0xeb, 0xb2, 0xd0, 0x4d, 0xb2, 0x27, 0x85,
	0x7f, 0x4b, 0xd0, 0x2d, 0x94, 0xd6, 0x2a, 0x0b, 0x69, 0x92, 0xa2, 0x19, 0x48, 0xcb, 0x30, 0x09,
	0x08, 0x5b, 0xb1, 0x30, 0xc9, 0xb8, 0x5a, 0x3a, 0xfd, 0x7a, 0x54, 0x96, 0x3b, 0xda, 0x90, 0x8f,
	0x66, 0x6b, 0x2d, 0xae, 0x1a, 0x91, 0x0a, 0x07, 0x4b, 0x46, 0x93, 0xcc, 0xf1, 0xdc, 0x98, 0x30,
	0xb7, 0xdf, 0xe4, 0xa0, 0xe3, 0xa7, 0x41, 0xc4, 0xcd, 0xee, 0x19, 0xc1, 0x12, 0x77, 0xa9, 0xdc,
	0x84, 0x14, 0x90, 0x18, 0x71, 0xd9, 0x23, 0x63, 0xa7, 0x26, 0x03, 0x72, 0x93, 0x40, 0x58, 0x80,
	0x3e, 0xb8, 0x29, 0x71, 0x5c, 0xcf, 0x23, 0x11, 0x61, 0x34, 0x26, 0x19, 0x61, 0xfd, 0xdd, 0x9a,
	0xa4, 0xa3, 0xdc, 0xab, 0x54, 0xad, 0x68, 0x0e, 0x47, 0x51, 0xe8, 0xff, 0x8b, 0xb7, 0x57, 0x93,
	0x27, 0x47, 0xa1, 0xbf, 0x89, 0xbb, 0x80, 0x1e, 0xaf, 0x2f, 0x78, 0x60, 0x34, 0xf5, 0xe8, 0x8a,
	0xf4, 0x5b, 0x35, 0x59, 0xdd, 0xdc, 0x77, 0xf1, 0x68, 0x43, 0x1a, 0x74, 0xf3, 0xba, 0xd6, 0x9c,
	0xfd, 0x9a, 0x9c, 0x83, 0x28, 0xf4, 0xd7, 0x98, 0x39, 0xf0, 0x9e, 0x9d, 0xd8, 0x0d, 0x12, 0x92,
	0x89, 0xf6, 0xda, 0x75, 0xdb, 0xcb, 0xad, 0xf3, 0x8a, 0x13, 0x5d, 0x41, 0xde, 0xf2, 0x26, 0xad,
	0x53, 0x93, 0x76, 0x18, 0x85, 0xfe, 0x06, 0xcc, 0x10, 0xb5, 0x45, 0x61, 0x70, 0x97, 0x39, 0x29,
	0x49, 0x52, 0xca, 0xfa, 0x50, 0x97, 0x96, 0x5b, 0x8d, 0xdc, 0xb9, 0xe0, 0x46, 0xf4, 0x73, 0x51,
	0xda, 0x06, 0x4c, 0xaa, 0x09, 0xeb, 0x45, 0xa1, 0x5f, 0x65, 0x4d, 0x40, 0xca, 0xe8, 0xbd, 0x77,
	0x97, 0x7a, 0x8c, 0x90, 0xa4, 0x7f, 0x50, 0xf7, 0x65, 0xaf, 0x98, 0xd0, 0xf7, 0xd0, 0x4a, 0xb3,
	0x87, 0xe8, 0x3e, 0xed, 0x77, 0xb9, 0xfd, 0x8b, 0x27, 0xed, 0x0b, 0x2e, 0xc3, 0x42, 0x3e, 0x98,
	0xc2, 0xbe, 0x00, 0xa2, 0x1f, 0xa0, 0xbd, 0x62, 0x24, 0x25, 0x89, 0x57, 0x7c, 0xe8, 0xbd, 0xd3,
	0xcf, 0x2b, 0x94, 0x6b, 0x71, 0x6b, 0xa4, 0x27, 0x7e, 0xe8, 0xb9, 0x19, 0x65, 0xb8, 0x94, 0x0f,
	0x7e, 0x6b, 0x82, 0x54, 0xf9, 0x9a, 0x3f, 0x01, 0x85, 0x74, 0x68, 0x47, 0xd4, 0x73, 0xf3, 0x62,
	0xf9, 0x77, 0xdf, 0x3b, 0xfd, 0xae, 0xce, 0x01, 0x32, 0x32, 0x84, 0x09, 0x97, 0xf6, 0xe1, 0xaf,
	0xd0, 0x7e, 0xcc, 0xa2, 0x63, 0x78, 0x3d, 0xd3, 0xcd, 0x0b, 0x0d, 0x5f, 0x63, 0xdd, 0xb4, 0x1d,
	0xc3, 0x52, 0x15, 0x5b, 0xb7, 0x4c, 0xe7, 0xc6, 0xbc, 0x32, 0xad, 0x77, 0xa6, 0xfc, 0x0c, 0xbd,
	0x82, 0xff, 0x5f, 0x5b, 0xef, 0x34, 0xec, 0x4c, 0x6e, 0x6c, 0xdb, 0x32, 0x1d, 0xdb, 0xba, 0x76,
	0x0c, 0x6d, 0x66, 0xcb, 0x0d, 0xf4, 0x02, 0xd0, 0x95, 0x76, 0x3b, 0xb1, 0x14, 0x3c, 0xe5, 0x69,
	0xac, 0x5f, 0x5c, 0xda, 0x72, 0x33, 0xb7, 0x94, 0xf9, 0x89, 0x65, 0xdb, 0xd6, 0x5c, 0xdc, 0xda,
	0x19, 0xfc, 0xd5, 0x80, 0x56, 0xb1, 0xd4, 0x9f, 0xb2, 0x18, 0x53, 0x68, 0x7b, 0x6e, 0x46, 0x02,
	0xca, 0x1e, 0xc4, 0x62, 0x9c, 0xfc, 0xc7, 0xc6, 0x8e, 0x54, 0xa1, 0xc7, 0xa5, 0x73, 0xa8, 0x42,
	0xfb, 0x31, 0x8b, 0x3e, 0x83, 0x97, 0x0b, 0xfb, 0xd6, 0xb8, 0x59, 0x38, 0xaa, 0x62, 0x6b, 0x17,
	0x16, 0xbe, 0xad, 0x2c, 0xc1, 0x01, 0xb4, 0x75, 0xd3, 0xd6, 0xb0, 0xa9, 0x18, 0x72, 0x23, 0x8f,
	0xb4, 0xf7, 0x22, 0x6a, 0x0e, 0xff, 0xd8, 0x85, 0x56, 0xf1, 0x40, 0xf4, 0x15, 0x34, 0x43, 0x5f,
	0x9c, 0xee, 0xff, 0xdb, 0xaa, 0x47, 0xf7, 0x71, 0x33, 0xf4, 0xd1, 0x19, 0xc0, 0xaa, 0x98, 0x45,
	0x4e, 0xe8, 0x8b, 0x13, 0xfc, 0xf9, 0x46, 0xdf, 0x62, 0x50, 0xe1, 0xce, 0xaa, 0x9c, 0x59, 0xdf,
	0x42, 0x8b, 0xfa, 0xdc, 0xb0, 0xb3, 0x6d, 0x28, 0x46, 0x9d, 0xee, 0xe3, 0x3d, 0xea, 0xe7, 0x62,
	0x04, 0xbb, 0x89, 0x1b, 0x13, 0x7e, 0x1e, 0x77, 0x30, 0xbf, 0x46, 0xe7, 0xd0, 0xfe, 0x58, 0x8c,
	0xad, 0xb4, 0xdf, 0x3a, 0xde, 0x39, 0x91, 0x4e, 0x5f, 0x6d, 0x15, 0x38, 0x12, 0x83, 0x0d, 0x97,
	0xd2, 0xc1, 0x9f, 0x0d, 0xd8, 0x17, 0x59, 0xf4, 0x4d, 0xa5, 0xbb, 0xc1, 0x96, 0xb9, 0x1c, 0x8a,
	0xbc, 0xc9, 0x1f, 0x41, 0x5a, 0x52, 0x16, 0x3b, 0x4b, 0xd7, 0xcb, 0x28, 0x13, 0x5b, 0xf4, 0x7a,
	0xfb, 0x89, 0x33, 0xca, 0xe2, 0x19, 0xd7, 0x60, 0x58, 0x96, 0xd7, 0xe8, 0x27, 0xe8, 0x15, 0xb3,
	0xdf, 0xa1, 0xc5, 0x26, 0x8a, 0xb6, 0xfb, 0x4f, 0x6d, 0x32, 0xee, 0xfa, 0xd5, 0x70, 0xf8, 0x7b,
	0x03, 0x60, 0xcd, 0xce, 0xdf, 0xc7, 0x99, 0x85, 0xe7, 0xce, 0x4c, 0x51, 0x6d, 0x0b, 0x3b, 0x37,
	0xe6, 0x54, 0x9b, 0xe9, 0xa6, 0x36, 0x95, 0x9f, 0xa1, 0x2e, 0x74, 0x54, 0x43, 0x99, 0x2f, 0x2e,
	0x35, 0x23, 0xdf, 0xdb, 0x43, 0x90, 0x54, 0xcb, 0x7c, 0xab, 0x61, 0x5b, 0x9f, 0x18, 0x9a, 0xdc,
	0x44, 0x3d, 0x80, 0xa9, 0x66, 0x2b, 0xea, 0xa5, 0x92, 0xc7, 0x3b, 0x79, 0xac, 0x5e, 0x62, 0x6b,
	0xae, 0x4d, 0x94, 0x85, 0x26, 0xef, 0x72, 0x7f, 0x11, 0x5b, 0xef, 0xe5, 0xbd, 0x4a, 0xa8, 0xdb,
	0x72, 0x8b, 0xe3, 0x78, 0xb8, 0x30, 0x14, 0x5b, 0x93, 0xf7, 0x87, 0xe7, 0x00, 0x45, 0xe1, 0x46,
	0x98, 0x66, 0xe8, 0xcd, 0xfa, 0xff, 0x21, 0xdf, 0x92, 0xa3, 0xad, 0xf6, 0xc4, 0x2f, 0xc5, 0xe4,
	0xfc, 0x97, 0xb3, 0x80, 0x8e, 0xbc, 0x3b, 0x46, 0xe3, 0xf0, 0x3e, 0x1e, 0x51, 0x16, 0x8c, 0x1f,
	0x03, 0x9a, 0x8e, 0xc3, 0x64, 0xc9, 0xdc, 0x31, 0xf7, 0x8e, 0x03, 0x3a, 0x2e, 0x21, 0x1f, 0x5a,
	0xfc, 0xf2, 0xec, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa5, 0xa9, 0x49, 0x2b, 0x54, 0x09, 0x00,
	0x00,
}
