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

/*
Package grpc_testingv3 is a generated protocol buffer package.

It is generated from these files:
	testv3.proto

It has these top-level messages:
	SearchResponseV3
	SearchRequestV3
*/
package grpc_testingv3

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

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 SearchResponseV3_State int32

const (
	SearchResponseV3_UNKNOWN SearchResponseV3_State = 0
	SearchResponseV3_FRESH   SearchResponseV3_State = 1
	SearchResponseV3_STALE   SearchResponseV3_State = 2
)

var SearchResponseV3_State_name = map[int32]string{
	0: "UNKNOWN",
	1: "FRESH",
	2: "STALE",
}
var SearchResponseV3_State_value = map[string]int32{
	"UNKNOWN": 0,
	"FRESH":   1,
	"STALE":   2,
}

func (x SearchResponseV3_State) String() string {
	return proto.EnumName(SearchResponseV3_State_name, int32(x))
}
func (SearchResponseV3_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} }

type SearchResponseV3 struct {
	Results []*SearchResponseV3_Result `protobuf:"bytes,1,rep,name=results" json:"results,omitempty"`
	State   SearchResponseV3_State     `protobuf:"varint,2,opt,name=state,enum=grpc.testingv3.SearchResponseV3_State" json:"state,omitempty"`
}

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

func (m *SearchResponseV3) GetResults() []*SearchResponseV3_Result {
	if m != nil {
		return m.Results
	}
	return nil
}

func (m *SearchResponseV3) GetState() SearchResponseV3_State {
	if m != nil {
		return m.State
	}
	return SearchResponseV3_UNKNOWN
}

type SearchResponseV3_Result struct {
	Url      string                                    `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"`
	Title    string                                    `protobuf:"bytes,2,opt,name=title" json:"title,omitempty"`
	Snippets []string                                  `protobuf:"bytes,3,rep,name=snippets" json:"snippets,omitempty"`
	Metadata map[string]*SearchResponseV3_Result_Value `protobuf:"bytes,4,rep,name=metadata" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
}

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

func (m *SearchResponseV3_Result) GetUrl() string {
	if m != nil {
		return m.Url
	}
	return ""
}

func (m *SearchResponseV3_Result) GetTitle() string {
	if m != nil {
		return m.Title
	}
	return ""
}

func (m *SearchResponseV3_Result) GetSnippets() []string {
	if m != nil {
		return m.Snippets
	}
	return nil
}

func (m *SearchResponseV3_Result) GetMetadata() map[string]*SearchResponseV3_Result_Value {
	if m != nil {
		return m.Metadata
	}
	return nil
}

type SearchResponseV3_Result_Value struct {
	// Types that are valid to be assigned to Val:
	//	*SearchResponseV3_Result_Value_Str
	//	*SearchResponseV3_Result_Value_Int
	//	*SearchResponseV3_Result_Value_Real
	Val isSearchResponseV3_Result_Value_Val `protobuf_oneof:"val"`
}

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

type isSearchResponseV3_Result_Value_Val interface {
	isSearchResponseV3_Result_Value_Val()
}

type SearchResponseV3_Result_Value_Str struct {
	Str string `protobuf:"bytes,1,opt,name=str,oneof"`
}
type SearchResponseV3_Result_Value_Int struct {
	Int int64 `protobuf:"varint,2,opt,name=int,oneof"`
}
type SearchResponseV3_Result_Value_Real struct {
	Real float64 `protobuf:"fixed64,3,opt,name=real,oneof"`
}

func (*SearchResponseV3_Result_Value_Str) isSearchResponseV3_Result_Value_Val()  {}
func (*SearchResponseV3_Result_Value_Int) isSearchResponseV3_Result_Value_Val()  {}
func (*SearchResponseV3_Result_Value_Real) isSearchResponseV3_Result_Value_Val() {}

func (m *SearchResponseV3_Result_Value) GetVal() isSearchResponseV3_Result_Value_Val {
	if m != nil {
		return m.Val
	}
	return nil
}

func (m *SearchResponseV3_Result_Value) GetStr() string {
	if x, ok := m.GetVal().(*SearchResponseV3_Result_Value_Str); ok {
		return x.Str
	}
	return ""
}

func (m *SearchResponseV3_Result_Value) GetInt() int64 {
	if x, ok := m.GetVal().(*SearchResponseV3_Result_Value_Int); ok {
		return x.Int
	}
	return 0
}

func (m *SearchResponseV3_Result_Value) GetReal() float64 {
	if x, ok := m.GetVal().(*SearchResponseV3_Result_Value_Real); ok {
		return x.Real
	}
	return 0
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*SearchResponseV3_Result_Value) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _SearchResponseV3_Result_Value_OneofMarshaler, _SearchResponseV3_Result_Value_OneofUnmarshaler, _SearchResponseV3_Result_Value_OneofSizer, []interface{}{
		(*SearchResponseV3_Result_Value_Str)(nil),
		(*SearchResponseV3_Result_Value_Int)(nil),
		(*SearchResponseV3_Result_Value_Real)(nil),
	}
}

func _SearchResponseV3_Result_Value_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*SearchResponseV3_Result_Value)
	// val
	switch x := m.Val.(type) {
	case *SearchResponseV3_Result_Value_Str:
		b.EncodeVarint(1<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.Str)
	case *SearchResponseV3_Result_Value_Int:
		b.EncodeVarint(2<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.Int))
	case *SearchResponseV3_Result_Value_Real:
		b.EncodeVarint(3<<3 | proto.WireFixed64)
		b.EncodeFixed64(math.Float64bits(x.Real))
	case nil:
	default:
		return fmt.Errorf("SearchResponseV3_Result_Value.Val has unexpected type %T", x)
	}
	return nil
}

func _SearchResponseV3_Result_Value_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*SearchResponseV3_Result_Value)
	switch tag {
	case 1: // val.str
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Val = &SearchResponseV3_Result_Value_Str{x}
		return true, err
	case 2: // val.int
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.Val = &SearchResponseV3_Result_Value_Int{int64(x)}
		return true, err
	case 3: // val.real
		if wire != proto.WireFixed64 {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeFixed64()
		m.Val = &SearchResponseV3_Result_Value_Real{math.Float64frombits(x)}
		return true, err
	default:
		return false, nil
	}
}

func _SearchResponseV3_Result_Value_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*SearchResponseV3_Result_Value)
	// val
	switch x := m.Val.(type) {
	case *SearchResponseV3_Result_Value_Str:
		n += proto.SizeVarint(1<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.Str)))
		n += len(x.Str)
	case *SearchResponseV3_Result_Value_Int:
		n += proto.SizeVarint(2<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.Int))
	case *SearchResponseV3_Result_Value_Real:
		n += proto.SizeVarint(3<<3 | proto.WireFixed64)
		n += 8
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

type SearchRequestV3 struct {
	Query string `protobuf:"bytes,1,opt,name=query" json:"query,omitempty"`
}

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

func (m *SearchRequestV3) GetQuery() string {
	if m != nil {
		return m.Query
	}
	return ""
}

func init() {
	proto.RegisterType((*SearchResponseV3)(nil), "grpc.testingv3.SearchResponseV3")
	proto.RegisterType((*SearchResponseV3_Result)(nil), "grpc.testingv3.SearchResponseV3.Result")
	proto.RegisterType((*SearchResponseV3_Result_Value)(nil), "grpc.testingv3.SearchResponseV3.Result.Value")
	proto.RegisterType((*SearchRequestV3)(nil), "grpc.testingv3.SearchRequestV3")
	proto.RegisterEnum("grpc.testingv3.SearchResponseV3_State", SearchResponseV3_State_name, SearchResponseV3_State_value)
}

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

// Client API for SearchServiceV3 service

type SearchServiceV3Client interface {
	Search(ctx context.Context, in *SearchRequestV3, opts ...grpc.CallOption) (*SearchResponseV3, error)
	StreamingSearch(ctx context.Context, opts ...grpc.CallOption) (SearchServiceV3_StreamingSearchClient, error)
}

type searchServiceV3Client struct {
	cc *grpc.ClientConn
}

func NewSearchServiceV3Client(cc *grpc.ClientConn) SearchServiceV3Client {
	return &searchServiceV3Client{cc}
}

func (c *searchServiceV3Client) Search(ctx context.Context, in *SearchRequestV3, opts ...grpc.CallOption) (*SearchResponseV3, error) {
	out := new(SearchResponseV3)
	err := grpc.Invoke(ctx, "/grpc.testingv3.SearchServiceV3/Search", in, out, c.cc, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *searchServiceV3Client) StreamingSearch(ctx context.Context, opts ...grpc.CallOption) (SearchServiceV3_StreamingSearchClient, error) {
	stream, err := grpc.NewClientStream(ctx, &_SearchServiceV3_serviceDesc.Streams[0], c.cc, "/grpc.testingv3.SearchServiceV3/StreamingSearch", opts...)
	if err != nil {
		return nil, err
	}
	x := &searchServiceV3StreamingSearchClient{stream}
	return x, nil
}

type SearchServiceV3_StreamingSearchClient interface {
	Send(*SearchRequestV3) error
	Recv() (*SearchResponseV3, error)
	grpc.ClientStream
}

type searchServiceV3StreamingSearchClient struct {
	grpc.ClientStream
}

func (x *searchServiceV3StreamingSearchClient) Send(m *SearchRequestV3) error {
	return x.ClientStream.SendMsg(m)
}

func (x *searchServiceV3StreamingSearchClient) Recv() (*SearchResponseV3, error) {
	m := new(SearchResponseV3)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

// Server API for SearchServiceV3 service

type SearchServiceV3Server interface {
	Search(context.Context, *SearchRequestV3) (*SearchResponseV3, error)
	StreamingSearch(SearchServiceV3_StreamingSearchServer) error
}

func RegisterSearchServiceV3Server(s *grpc.Server, srv SearchServiceV3Server) {
	s.RegisterService(&_SearchServiceV3_serviceDesc, srv)
}

func _SearchServiceV3_Search_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(SearchRequestV3)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(SearchServiceV3Server).Search(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/grpc.testingv3.SearchServiceV3/Search",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(SearchServiceV3Server).Search(ctx, req.(*SearchRequestV3))
	}
	return interceptor(ctx, in, info, handler)
}

func _SearchServiceV3_StreamingSearch_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(SearchServiceV3Server).StreamingSearch(&searchServiceV3StreamingSearchServer{stream})
}

type SearchServiceV3_StreamingSearchServer interface {
	Send(*SearchResponseV3) error
	Recv() (*SearchRequestV3, error)
	grpc.ServerStream
}

type searchServiceV3StreamingSearchServer struct {
	grpc.ServerStream
}

func (x *searchServiceV3StreamingSearchServer) Send(m *SearchResponseV3) error {
	return x.ServerStream.SendMsg(m)
}

func (x *searchServiceV3StreamingSearchServer) Recv() (*SearchRequestV3, error) {
	m := new(SearchRequestV3)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

var _SearchServiceV3_serviceDesc = grpc.ServiceDesc{
	ServiceName: "grpc.testingv3.SearchServiceV3",
	HandlerType: (*SearchServiceV3Server)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "Search",
			Handler:    _SearchServiceV3_Search_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "StreamingSearch",
			Handler:       _SearchServiceV3_StreamingSearch_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
	},
	Metadata: fileDescriptor0,
}

func init() { proto.RegisterFile("testv3.proto", fileDescriptor0) }

var fileDescriptor0 = []byte{
	// 416 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0xd1, 0x6a, 0xd4, 0x40,
	0x14, 0x86, 0x77, 0x36, 0x9b, 0x6d, 0xf7, 0xac, 0xb6, 0x61, 0xe8, 0x45, 0xc8, 0x8d, 0x61, 0x2f,
	0x6c, 0x10, 0x0c, 0x92, 0x20, 0x88, 0x78, 0x53, 0x65, 0x65, 0xa1, 0x75, 0xc5, 0x89, 0xae, 0xde,
	0x8e, 0xeb, 0x61, 0x8d, 0x4d, 0xb3, 0xe9, 0xcc, 0x49, 0x60, 0x9f, 0xc5, 0x17, 0xf1, 0x55, 0x7c,
	0x1b, 0x99, 0x99, 0xa6, 0x50, 0x41, 0xba, 0x17, 0xde, 0xcd, 0x7f, 0x38, 0xff, 0x37, 0xff, 0x3f,
	0x24, 0xf0, 0x80, 0x50, 0x53, 0x97, 0xa7, 0x8d, 0xda, 0xd2, 0x96, 0x1f, 0x6d, 0x54, 0xb3, 0x4e,
	0xcd, 0xa8, 0xac, 0x37, 0x5d, 0x3e, 0xfb, 0x39, 0x82, 0xa0, 0x40, 0xa9, 0xd6, 0xdf, 0x05, 0xea,
	0x66, 0x5b, 0x6b, 0x5c, 0xe5, 0xfc, 0x0c, 0x0e, 0x14, 0xea, 0xb6, 0x22, 0x1d, 0xb2, 0xd8, 0x4b,
	0xa6, 0xd9, 0x69, 0x7a, 0xd7, 0x96, 0xfe, 0x6d, 0x49, 0x85, 0xdd, 0x17, 0xbd, 0x8f, 0xbf, 0x02,
	0x5f, 0x93, 0x24, 0x0c, 0x87, 0x31, 0x4b, 0x8e, 0xb2, 0xc7, 0xf7, 0x02, 0x0a, 0xb3, 0x2d, 0x9c,
	0x29, 0xfa, 0x3d, 0x84, 0xb1, 0x23, 0xf2, 0x00, 0xbc, 0x56, 0x55, 0x21, 0x8b, 0x59, 0x32, 0x11,
	0xe6, 0xc8, 0x4f, 0xc0, 0xa7, 0x92, 0x2a, 0x87, 0x9e, 0x08, 0x27, 0x78, 0x04, 0x87, 0xba, 0x2e,
	0x9b, 0x06, 0x49, 0x87, 0x5e, 0xec, 0x25, 0x13, 0x71, 0xab, 0xf9, 0x07, 0x38, 0xbc, 0x42, 0x92,
	0xdf, 0x24, 0xc9, 0x70, 0x64, 0x0b, 0x3d, 0xdf, 0xb3, 0x50, 0xfa, 0xee, 0xc6, 0x37, 0xaf, 0x49,
	0xed, 0xc4, 0x2d, 0x26, 0xba, 0x00, 0x7f, 0x25, 0xab, 0x16, 0x39, 0x07, 0x4f, 0x93, 0x72, 0xf9,
	0x16, 0x03, 0x61, 0x84, 0x99, 0x95, 0x35, 0xd9, 0x7c, 0x9e, 0x99, 0x95, 0x35, 0xf1, 0x13, 0x18,
	0x29, 0x94, 0x55, 0xe8, 0xc5, 0x2c, 0x61, 0x8b, 0x81, 0xb0, 0xea, 0xb5, 0x0f, 0x5e, 0x27, 0xab,
	0xe8, 0x07, 0x3c, 0xbc, 0x73, 0x91, 0x69, 0x7d, 0x89, 0xbb, 0xbe, 0xf5, 0x25, 0xee, 0xf8, 0x1b,
	0xf0, 0x3b, 0x73, 0xa1, 0xa5, 0x4e, 0xb3, 0xa7, 0xfb, 0x16, 0xb0, 0x29, 0x85, 0xf3, 0xbe, 0x1c,
	0xbe, 0x60, 0xb3, 0x27, 0xe0, 0xdb, 0xb7, 0xe6, 0x53, 0x38, 0xf8, 0xb4, 0x3c, 0x5f, 0xbe, 0xff,
	0xbc, 0x0c, 0x06, 0x7c, 0x02, 0xfe, 0x5b, 0x31, 0x2f, 0x16, 0x01, 0x33, 0xc7, 0xe2, 0xe3, 0xd9,
	0xc5, 0x3c, 0x18, 0xce, 0x4e, 0xe1, 0xb8, 0xe7, 0x5e, 0xb7, 0xa8, 0x69, 0x95, 0x9b, 0xd7, 0xbf,
	0x6e, 0x51, 0xf5, 0xd9, 0x9c, 0xc8, 0x7e, 0xb1, 0x7e, 0xb3, 0x40, 0xd5, 0x95, 0x6b, 0xf3, 0x15,
	0x9d, 0xc3, 0xd8, 0x8d, 0xf8, 0xa3, 0x7f, 0x85, 0xbd, 0x81, 0x46, 0xf1, 0x7d, 0x6d, 0xf8, 0x17,
	0x38, 0x2e, 0x48, 0xa1, 0xbc, 0x2a, 0xeb, 0xcd, 0x7f, 0xa3, 0x26, 0xec, 0x19, 0xfb, 0x3a, 0xb6,
	0x3f, 0x46, 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0xed, 0xa2, 0x8d, 0x75, 0x28, 0x03, 0x00, 0x00,
}
