// Code generated by protoc-gen-go. DO NOT EDIT.
// source: test_platform/phosphorus/common.proto

package phosphorus

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

// BotEnvironment defines bot-specific parameters used by phosphorus.
type BotEnvironment struct {
	// Absolute path to the autotest directory for the bot, e.g.
	// "/usr/local/autotest".
	AutotestDir          string   `protobuf:"bytes,1,opt,name=autotest_dir,json=autotestDir,proto3" json:"autotest_dir,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_BotEnvironment proto.InternalMessageInfo

func (m *BotEnvironment) GetAutotestDir() string {
	if m != nil {
		return m.AutotestDir
	}
	return ""
}

// TaskEnvironment defines task-specific parameters used by phosphorus.
type TaskEnvironment struct {
	// Path to the client offload directory relative to the results directory
	//  Intended for log-data which is needed synchronously with high reliability
	SynchronousOffloadDir string `protobuf:"bytes,1,opt,name=synchronous_offload_dir,json=synchronousOffloadDir,proto3" json:"synchronous_offload_dir,omitempty"`
	// Absolute path to the results directory for a given run. Include results of
	//  both tests and non-test tasks like provision
	ResultsDir string `protobuf:"bytes,2,opt,name=results_dir,json=resultsDir,proto3" json:"results_dir,omitempty"`
	// Absolute path to the results directory for a given run's tests.
	//  MUST be equal to ${results_dir}/autoserv_test if present. This restriction
	//  may be lifted in the future.
	TestResultsDir       string   `protobuf:"bytes,3,opt,name=test_results_dir,json=testResultsDir,proto3" json:"test_results_dir,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_TaskEnvironment proto.InternalMessageInfo

func (m *TaskEnvironment) GetSynchronousOffloadDir() string {
	if m != nil {
		return m.SynchronousOffloadDir
	}
	return ""
}

func (m *TaskEnvironment) GetResultsDir() string {
	if m != nil {
		return m.ResultsDir
	}
	return ""
}

func (m *TaskEnvironment) GetTestResultsDir() string {
	if m != nil {
		return m.TestResultsDir
	}
	return ""
}

// Config defines configuration parameters common to phosphorus subcommands.
type Config struct {
	Bot                  *BotEnvironment  `protobuf:"bytes,1,opt,name=bot,proto3" json:"bot,omitempty"`
	Task                 *TaskEnvironment `protobuf:"bytes,2,opt,name=task,proto3" json:"task,omitempty"`
	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
	XXX_unrecognized     []byte           `json:"-"`
	XXX_sizecache        int32            `json:"-"`
}

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

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

var xxx_messageInfo_Config proto.InternalMessageInfo

func (m *Config) GetBot() *BotEnvironment {
	if m != nil {
		return m.Bot
	}
	return nil
}

func (m *Config) GetTask() *TaskEnvironment {
	if m != nil {
		return m.Task
	}
	return nil
}

func init() {
	proto.RegisterType((*BotEnvironment)(nil), "test_platform.phosphorus.BotEnvironment")
	proto.RegisterType((*TaskEnvironment)(nil), "test_platform.phosphorus.TaskEnvironment")
	proto.RegisterType((*Config)(nil), "test_platform.phosphorus.Config")
}

func init() {
	proto.RegisterFile("test_platform/phosphorus/common.proto", fileDescriptor_6d57f1c2e65b1971)
}

var fileDescriptor_6d57f1c2e65b1971 = []byte{
	// 280 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x91, 0x4f, 0x4b, 0xf3, 0x40,
	0x10, 0x87, 0xc9, 0xdb, 0x97, 0x82, 0x13, 0xa9, 0x12, 0x10, 0x7b, 0x53, 0x03, 0x42, 0xbc, 0xec,
	0x42, 0x0b, 0x1e, 0x04, 0x2f, 0x31, 0x9e, 0x85, 0xe0, 0xc9, 0x4b, 0xd9, 0xb6, 0xf9, 0xb3, 0x34,
	0xbb, 0x13, 0x66, 0x37, 0x82, 0x67, 0xbf, 0x82, 0x1f, 0x58, 0x32, 0x5a, 0x4d, 0x85, 0x1c, 0x77,
	0xe6, 0x79, 0x76, 0xe7, 0xb7, 0x03, 0xd7, 0xbe, 0x70, 0x7e, 0xd5, 0x36, 0xca, 0x97, 0x48, 0x46,
	0xb6, 0x35, 0xba, 0xb6, 0x46, 0xea, 0x9c, 0xdc, 0xa0, 0x31, 0x68, 0x45, 0x4b, 0xe8, 0x31, 0x9a,
	0x1f, 0x60, 0xe2, 0x17, 0x8b, 0x97, 0x30, 0x4b, 0xd1, 0x3f, 0xda, 0x57, 0x4d, 0x68, 0x4d, 0x61,
	0x7d, 0x74, 0x05, 0xc7, 0xaa, 0xf3, 0xc8, 0xc6, 0x56, 0xd3, 0x3c, 0xb8, 0x0c, 0x92, 0xa3, 0x3c,
	0xdc, 0xd7, 0x32, 0x4d, 0xf1, 0x47, 0x00, 0x27, 0xcf, 0xca, 0xed, 0x86, 0xda, 0x2d, 0x9c, 0xbb,
	0x37, 0xbb, 0xa9, 0x09, 0x2d, 0x76, 0x6e, 0x85, 0x65, 0xd9, 0xa0, 0xda, 0x0e, 0x6e, 0x38, 0x1b,
	0xb4, 0x9f, 0xbe, 0xba, 0x99, 0xa6, 0xe8, 0x02, 0x42, 0x2a, 0x5c, 0xd7, 0x78, 0xc7, 0xec, 0x3f,
	0x66, 0xe1, 0xbb, 0xd4, 0x03, 0x09, 0x9c, 0xf2, 0x2c, 0x43, 0x6a, 0xc2, 0xd4, 0xac, 0xaf, 0xe7,
	0x3f, 0x64, 0xfc, 0x1e, 0xc0, 0xf4, 0x01, 0x6d, 0xa9, 0xab, 0xe8, 0x0e, 0x26, 0x6b, 0xf4, 0xfc,
	0x72, 0xb8, 0x48, 0xc4, 0x58, 0x7c, 0x71, 0x98, 0x3d, 0xef, 0xa5, 0xe8, 0x1e, 0xfe, 0x7b, 0xe5,
	0x76, 0x3c, 0x4a, 0xb8, 0xb8, 0x19, 0x97, 0xff, 0x7c, 0x41, 0xce, 0x5a, 0x9a, 0xbd, 0xa4, 0x15,
	0x8a, 0x3e, 0xa9, 0xd1, 0x9d, 0x11, 0x48, 0x95, 0xdc, 0x1f, 0xd0, 0x49, 0x6d, 0x4b, 0x52, 0x92,
	0xb7, 0x22, 0x2b, 0x94, 0x63, 0xeb, 0x5b, 0x4f, 0x19, 0x59, 0x7e, 0x06, 0x00, 0x00, 0xff, 0xff,
	0x44, 0xec, 0xd3, 0xb7, 0xe1, 0x01, 0x00, 0x00,
}
