// Code generated by protoc-gen-go. DO NOT EDIT.
// source: google/ads/googleads/v3/resources/mutate_job.proto

package resources

import (
	fmt "fmt"
	math "math"

	proto "github.com/golang/protobuf/proto"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
	_ "google.golang.org/genproto/googleapis/api/annotations"
)

// 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

// A list of mutates being processed asynchronously. The mutates are uploaded
// by the user. The mutates themselves aren't readable and the results of the
// job can only be read using MutateJobService.ListMutateJobResults.
type MutateJob struct {
	// The resource name of the mutate job.
	// Mutate job resource names have the form:
	//
	// `customers/{customer_id}/mutateJobs/{mutate_job_id}`
	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
	// ID of this mutate job.
	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
	// The next sequence token to use when adding operations. Only set when the
	// mutate job status is PENDING.
	NextAddSequenceToken *wrappers.StringValue `protobuf:"bytes,3,opt,name=next_add_sequence_token,json=nextAddSequenceToken,proto3" json:"next_add_sequence_token,omitempty"`
	// Contains additional information about this mutate job.
	Metadata *MutateJob_MutateJobMetadata `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"`
	// Status of this mutate job.
	Status enums.MutateJobStatusEnum_MutateJobStatus `protobuf:"varint,5,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.MutateJobStatusEnum_MutateJobStatus" json:"status,omitempty"`
	// The resource name of the long-running operation that can be used to poll
	// for completion. Only set when the mutate job status is RUNNING or DONE.
	LongRunningOperation *wrappers.StringValue `protobuf:"bytes,6,opt,name=long_running_operation,json=longRunningOperation,proto3" json:"long_running_operation,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

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

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

var xxx_messageInfo_MutateJob proto.InternalMessageInfo

func (m *MutateJob) GetResourceName() string {
	if m != nil {
		return m.ResourceName
	}
	return ""
}

func (m *MutateJob) GetId() *wrappers.Int64Value {
	if m != nil {
		return m.Id
	}
	return nil
}

func (m *MutateJob) GetNextAddSequenceToken() *wrappers.StringValue {
	if m != nil {
		return m.NextAddSequenceToken
	}
	return nil
}

func (m *MutateJob) GetMetadata() *MutateJob_MutateJobMetadata {
	if m != nil {
		return m.Metadata
	}
	return nil
}

func (m *MutateJob) GetStatus() enums.MutateJobStatusEnum_MutateJobStatus {
	if m != nil {
		return m.Status
	}
	return enums.MutateJobStatusEnum_UNSPECIFIED
}

func (m *MutateJob) GetLongRunningOperation() *wrappers.StringValue {
	if m != nil {
		return m.LongRunningOperation
	}
	return nil
}

// Additional information about the mutate job. This message is also used as
// metadata returned in mutate job Long Running Operations.
type MutateJob_MutateJobMetadata struct {
	// The time when this mutate job was created.
	// Formatted as yyyy-mm-dd hh:mm:ss. Example: "2018-03-05 09:15:00"
	CreationDateTime *wrappers.StringValue `protobuf:"bytes,1,opt,name=creation_date_time,json=creationDateTime,proto3" json:"creation_date_time,omitempty"`
	// The time when this mutate job was completed.
	// Formatted as yyyy-MM-dd HH:mm:ss. Example: "2018-03-05 09:16:00"
	CompletionDateTime *wrappers.StringValue `protobuf:"bytes,2,opt,name=completion_date_time,json=completionDateTime,proto3" json:"completion_date_time,omitempty"`
	// The fraction (between 0.0 and 1.0) of mutates that have been processed.
	// This is empty if the job hasn't started running yet.
	EstimatedCompletionRatio *wrappers.DoubleValue `protobuf:"bytes,3,opt,name=estimated_completion_ratio,json=estimatedCompletionRatio,proto3" json:"estimated_completion_ratio,omitempty"`
	// The number of mutate operations in the mutate job.
	OperationCount *wrappers.Int64Value `protobuf:"bytes,4,opt,name=operation_count,json=operationCount,proto3" json:"operation_count,omitempty"`
	// The number of mutate operations executed by the mutate job.
	// Present only if the job has started running.
	ExecutedOperationCount *wrappers.Int64Value `protobuf:"bytes,5,opt,name=executed_operation_count,json=executedOperationCount,proto3" json:"executed_operation_count,omitempty"`
	XXX_NoUnkeyedLiteral   struct{}             `json:"-"`
	XXX_unrecognized       []byte               `json:"-"`
	XXX_sizecache          int32                `json:"-"`
}

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

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

var xxx_messageInfo_MutateJob_MutateJobMetadata proto.InternalMessageInfo

func (m *MutateJob_MutateJobMetadata) GetCreationDateTime() *wrappers.StringValue {
	if m != nil {
		return m.CreationDateTime
	}
	return nil
}

func (m *MutateJob_MutateJobMetadata) GetCompletionDateTime() *wrappers.StringValue {
	if m != nil {
		return m.CompletionDateTime
	}
	return nil
}

func (m *MutateJob_MutateJobMetadata) GetEstimatedCompletionRatio() *wrappers.DoubleValue {
	if m != nil {
		return m.EstimatedCompletionRatio
	}
	return nil
}

func (m *MutateJob_MutateJobMetadata) GetOperationCount() *wrappers.Int64Value {
	if m != nil {
		return m.OperationCount
	}
	return nil
}

func (m *MutateJob_MutateJobMetadata) GetExecutedOperationCount() *wrappers.Int64Value {
	if m != nil {
		return m.ExecutedOperationCount
	}
	return nil
}

func init() {
	proto.RegisterType((*MutateJob)(nil), "google.ads.googleads.v3.resources.MutateJob")
	proto.RegisterType((*MutateJob_MutateJobMetadata)(nil), "google.ads.googleads.v3.resources.MutateJob.MutateJobMetadata")
}

func init() {
	proto.RegisterFile("google/ads/googleads/v3/resources/mutate_job.proto", fileDescriptor_0931df65c93d4349)
}

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