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

package jobmanagement_v1

import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"
import pipeline_v1 "github.com/apache/beam/sdks/go/pkg/beam/model/pipeline_v1"

import (
	context "golang.org/x/net/context"
	grpc "google.golang.org/grpc"
)

// 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.ProtoPackageIsVersion2 // please upgrade the proto package

type ExpansionRequest struct {
	// Set of components needed to interpret the transform, or which
	// may be useful for its expansion.  This includes the input
	// PCollections (if any) to the to-be-expanded transform, along
	// with their coders and windowing strategies.
	Components *pipeline_v1.Components `protobuf:"bytes,1,opt,name=components,proto3" json:"components,omitempty"`
	// The actual PTransform to be expaneded according to its spec.
	// Its input should be set, but its subtransforms and outputs
	// should not be.
	Transform *pipeline_v1.PTransform `protobuf:"bytes,2,opt,name=transform,proto3" json:"transform,omitempty"`
	// A namespace (prefix) to use for the id of any newly created
	// components.
	Namespace            string   `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ExpansionRequest) Reset()         { *m = ExpansionRequest{} }
func (m *ExpansionRequest) String() string { return proto.CompactTextString(m) }
func (*ExpansionRequest) ProtoMessage()    {}
func (*ExpansionRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor_beam_expansion_api_493bf0692a755443, []int{0}
}
func (m *ExpansionRequest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ExpansionRequest.Unmarshal(m, b)
}
func (m *ExpansionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ExpansionRequest.Marshal(b, m, deterministic)
}
func (dst *ExpansionRequest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ExpansionRequest.Merge(dst, src)
}
func (m *ExpansionRequest) XXX_Size() int {
	return xxx_messageInfo_ExpansionRequest.Size(m)
}
func (m *ExpansionRequest) XXX_DiscardUnknown() {
	xxx_messageInfo_ExpansionRequest.DiscardUnknown(m)
}

var xxx_messageInfo_ExpansionRequest proto.InternalMessageInfo

func (m *ExpansionRequest) GetComponents() *pipeline_v1.Components {
	if m != nil {
		return m.Components
	}
	return nil
}

func (m *ExpansionRequest) GetTransform() *pipeline_v1.PTransform {
	if m != nil {
		return m.Transform
	}
	return nil
}

func (m *ExpansionRequest) GetNamespace() string {
	if m != nil {
		return m.Namespace
	}
	return ""
}

type ExpansionResponse struct {
	// Set of components needed to execute the expanded transform,
	// including the (original) inputs, outputs, and subtransforms.
	Components *pipeline_v1.Components `protobuf:"bytes,1,opt,name=components,proto3" json:"components,omitempty"`
	// The expanded transform itself, with references to its outputs
	// and subtransforms.
	Transform *pipeline_v1.PTransform `protobuf:"bytes,2,opt,name=transform,proto3" json:"transform,omitempty"`
	// (Optional) An string representation of any error encountered while
	// attempting to expand this transform.
	Error                string   `protobuf:"bytes,10,opt,name=error,proto3" json:"error,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ExpansionResponse) Reset()         { *m = ExpansionResponse{} }
func (m *ExpansionResponse) String() string { return proto.CompactTextString(m) }
func (*ExpansionResponse) ProtoMessage()    {}
func (*ExpansionResponse) Descriptor() ([]byte, []int) {
	return fileDescriptor_beam_expansion_api_493bf0692a755443, []int{1}
}
func (m *ExpansionResponse) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ExpansionResponse.Unmarshal(m, b)
}
func (m *ExpansionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ExpansionResponse.Marshal(b, m, deterministic)
}
func (dst *ExpansionResponse) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ExpansionResponse.Merge(dst, src)
}
func (m *ExpansionResponse) XXX_Size() int {
	return xxx_messageInfo_ExpansionResponse.Size(m)
}
func (m *ExpansionResponse) XXX_DiscardUnknown() {
	xxx_messageInfo_ExpansionResponse.DiscardUnknown(m)
}

var xxx_messageInfo_ExpansionResponse proto.InternalMessageInfo

func (m *ExpansionResponse) GetComponents() *pipeline_v1.Components {
	if m != nil {
		return m.Components
	}
	return nil
}

func (m *ExpansionResponse) GetTransform() *pipeline_v1.PTransform {
	if m != nil {
		return m.Transform
	}
	return nil
}

func (m *ExpansionResponse) GetError() string {
	if m != nil {
		return m.Error
	}
	return ""
}

func init() {
	proto.RegisterType((*ExpansionRequest)(nil), "org.apache.beam.model.expansion.v1.ExpansionRequest")
	proto.RegisterType((*ExpansionResponse)(nil), "org.apache.beam.model.expansion.v1.ExpansionResponse")
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// ExpansionServiceClient is the client API for ExpansionService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type ExpansionServiceClient interface {
	Expand(ctx context.Context, in *ExpansionRequest, opts ...grpc.CallOption) (*ExpansionResponse, error)
}

type expansionServiceClient struct {
	cc *grpc.ClientConn
}

func NewExpansionServiceClient(cc *grpc.ClientConn) ExpansionServiceClient {
	return &expansionServiceClient{cc}
}

func (c *expansionServiceClient) Expand(ctx context.Context, in *ExpansionRequest, opts ...grpc.CallOption) (*ExpansionResponse, error) {
	out := new(ExpansionResponse)
	err := c.cc.Invoke(ctx, "/org.apache.beam.model.expansion.v1.ExpansionService/Expand", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// ExpansionServiceServer is the server API for ExpansionService service.
type ExpansionServiceServer interface {
	Expand(context.Context, *ExpansionRequest) (*ExpansionResponse, error)
}

func RegisterExpansionServiceServer(s *grpc.Server, srv ExpansionServiceServer) {
	s.RegisterService(&_ExpansionService_serviceDesc, srv)
}

func _ExpansionService_Expand_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(ExpansionRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(ExpansionServiceServer).Expand(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/org.apache.beam.model.expansion.v1.ExpansionService/Expand",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(ExpansionServiceServer).Expand(ctx, req.(*ExpansionRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _ExpansionService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "org.apache.beam.model.expansion.v1.ExpansionService",
	HandlerType: (*ExpansionServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "Expand",
			Handler:    _ExpansionService_Expand_Handler,
		},
	},
	Streams:  []grpc.StreamDesc{},
	Metadata: "beam_expansion_api.proto",
}

func init() {
	proto.RegisterFile("beam_expansion_api.proto", fileDescriptor_beam_expansion_api_493bf0692a755443)
}

var fileDescriptor_beam_expansion_api_493bf0692a755443 = []byte{
	// 291 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x92, 0xc1, 0x4a, 0xc3, 0x40,
	0x10, 0x86, 0x89, 0x62, 0xa1, 0xab, 0x87, 0xba, 0x28, 0x84, 0xe2, 0xa1, 0xe4, 0x20, 0xbd, 0x38,
	0x90, 0xaa, 0x0f, 0x60, 0x45, 0x10, 0x44, 0x90, 0xe8, 0xc9, 0x4b, 0xd8, 0xa4, 0x63, 0x5d, 0xe9,
	0xce, 0xac, 0xbb, 0x49, 0xf0, 0x15, 0x7c, 0x30, 0x6f, 0x3e, 0x94, 0x98, 0xd2, 0x24, 0x4a, 0x41,
	0xbd, 0x79, 0xdc, 0xd9, 0xff, 0xfb, 0x97, 0x7f, 0xff, 0x11, 0x61, 0x86, 0xca, 0xa4, 0xf8, 0x62,
	0x15, 0x79, 0xcd, 0x94, 0x2a, 0xab, 0xc1, 0x3a, 0x2e, 0x58, 0x46, 0xec, 0xe6, 0xa0, 0xac, 0xca,
	0x1f, 0x11, 0x3e, 0x45, 0x60, 0x78, 0x86, 0x0b, 0x68, 0xa4, 0x50, 0xc5, 0xc3, 0xfd, 0x9a, 0x76,
	0x25, 0x11, 0xba, 0x16, 0x8d, 0xde, 0x03, 0x31, 0xb8, 0x58, 0xe9, 0x12, 0x7c, 0x2e, 0xd1, 0x17,
	0xf2, 0x5a, 0x88, 0x9c, 0x8d, 0x65, 0x42, 0x2a, 0x7c, 0x18, 0x8c, 0x82, 0xf1, 0xf6, 0xe4, 0x08,
	0xd6, 0x3f, 0x62, 0xb5, 0xc5, 0x85, 0x26, 0x84, 0x2a, 0x86, 0xf3, 0x06, 0x4a, 0x3a, 0x06, 0xf2,
	0x4a, 0xf4, 0x0b, 0xa7, 0xc8, 0x3f, 0xb0, 0x33, 0xe1, 0xc6, 0xaf, 0xdd, 0x6e, 0xee, 0x56, 0x50,
	0xd2, 0xf2, 0xf2, 0x40, 0xf4, 0x49, 0x19, 0xf4, 0x56, 0xe5, 0x18, 0x6e, 0x8e, 0x82, 0x71, 0x3f,
	0x69, 0x07, 0xd1, 0x5b, 0x20, 0x76, 0x3b, 0x71, 0xbc, 0x65, 0xf2, 0xf8, 0xaf, 0xf3, 0xec, 0x89,
	0x2d, 0x74, 0x8e, 0x5d, 0x28, 0xea, 0x2c, 0xcb, 0xc3, 0xe4, 0xb5, 0x5b, 0xcb, 0x2d, 0xba, 0x4a,
	0xe7, 0x28, 0x4b, 0xd1, 0xab, 0x67, 0x33, 0x79, 0x02, 0x3f, 0x37, 0x0e, 0xdf, 0x6b, 0x1d, 0x9e,
	0xfe, 0x91, 0x5a, 0xfe, 0xde, 0xf4, 0x52, 0x1c, 0xae, 0xe7, 0x9e, 0x38, 0x33, 0x8a, 0xd4, 0x1c,
	0x0d, 0x52, 0x01, 0x55, 0x3c, 0xdd, 0x69, 0xe0, 0x33, 0xab, 0xef, 0x07, 0x5f, 0xee, 0xd3, 0x2a,
	0xce, 0x7a, 0xf5, 0xce, 0x1d, 0x7f, 0x04, 0x00, 0x00, 0xff, 0xff, 0xa4, 0x2a, 0x51, 0x65, 0xca,
	0x02, 0x00, 0x00,
}
