# Generated by the pRPC protocol buffer compiler plugin.  DO NOT EDIT!
# source: test.proto

import base64
import zlib

from google.protobuf import descriptor_pb2

# Includes description of the test.proto and all of its transitive
# dependencies. Includes source code info.
FILE_DESCRIPTOR_SET = descriptor_pb2.FileDescriptorSet()
FILE_DESCRIPTOR_SET.ParseFromString(zlib.decompress(base64.b64decode(
    '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'
    'n7PJ2+gZKsi1bML+N1B+bEA=')))
_INDEX = {
    f.name: {
      'descriptor': f,
      'services': {s.name: s for s in f.service},
    }
    for f in FILE_DESCRIPTOR_SET.file
}


TestServiceDescription = {
  'file_descriptor_set': FILE_DESCRIPTOR_SET,
  'file_descriptor': _INDEX[u'test.proto']['descriptor'],
  'service_descriptor': _INDEX[u'test.proto']['services'][u'Test'],
}
