auto-claude: subtask-2-1 - Create service discovery utility using ReflectionClient

Adds GrpcDiscoveryClient for enumerating gRPC services via server reflection.
Includes:
- GrpcDiscoveryClient class with listServices(), discoverAllServices() methods
- Support for getting file descriptors for symbols and filenames
- DiscoveredService and DiscoveredMethod data classes
- Custom exceptions (ReflectionException, ConnectionException)
- Generated proto files for gRPC reflection (fixed for protobuf 6.0.0)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Mathias Beaulieu-Duncan 2026-01-20 12:52:37 -05:00
parent 74aef4ea06
commit 40f19c09f3
4 changed files with 1808 additions and 0 deletions

352
lib/api/grpc_discovery.dart Normal file
View File

@ -0,0 +1,352 @@
import 'dart:async';
import 'package:grpc/grpc.dart';
import 'grpc_config.dart';
import '../generated/reflection.pbgrpc.dart';
import '../generated/descriptor.pb.dart';
/// Exception types for gRPC discovery operations.
abstract class GrpcDiscoveryException implements Exception {
final String message;
GrpcDiscoveryException(this.message);
@override
String toString() => '$runtimeType: $message';
}
/// Thrown when the gRPC reflection service returns an error.
class ReflectionException extends GrpcDiscoveryException {
final int errorCode;
ReflectionException(super.message, this.errorCode);
@override
String toString() => 'ReflectionException: $message (code: $errorCode)';
}
/// Thrown when connection to the server fails.
class ConnectionException extends GrpcDiscoveryException {
ConnectionException(super.message);
}
/// Represents a discovered gRPC service with its methods.
class DiscoveredService {
final String name;
final List<DiscoveredMethod> methods;
const DiscoveredService({
required this.name,
required this.methods,
});
@override
String toString() => 'DiscoveredService($name, methods: ${methods.length})';
}
/// Represents a method within a discovered gRPC service.
class DiscoveredMethod {
final String name;
final String inputType;
final String outputType;
final bool clientStreaming;
final bool serverStreaming;
const DiscoveredMethod({
required this.name,
required this.inputType,
required this.outputType,
required this.clientStreaming,
required this.serverStreaming,
});
@override
String toString() => 'DiscoveredMethod($name)';
}
/// Client for discovering gRPC services using server reflection.
///
/// Connects to a gRPC server's reflection service to enumerate available
/// services and their method signatures. This is useful for development
/// and proto generation.
///
/// Example usage:
/// ```dart
/// final discovery = GrpcDiscoveryClient(config: GrpcConfig.development);
/// try {
/// final services = await discovery.listServices();
/// for (final service in services) {
/// print('Service: $service');
/// }
/// } finally {
/// await discovery.close();
/// }
/// ```
class GrpcDiscoveryClient {
final GrpcConfig config;
late final ClientChannel _channel;
late final ServerReflectionClient _stub;
bool _isInitialized = false;
GrpcDiscoveryClient({required this.config});
/// Initializes the gRPC channel and reflection client.
///
/// This is called automatically on first use, but can be called
/// explicitly to verify connection.
void _ensureInitialized() {
if (_isInitialized) return;
_channel = ClientChannel(
config.host,
port: config.port,
options: ChannelOptions(
credentials: config.useTls
? const ChannelCredentials.secure()
: const ChannelCredentials.insecure(),
connectionTimeout: config.timeout,
),
);
_stub = ServerReflectionClient(_channel);
_isInitialized = true;
}
/// Lists all available services on the server.
///
/// Returns a list of fully qualified service names.
/// Excludes the reflection service itself by default.
///
/// Throws [ConnectionException] if connection fails.
/// Throws [ReflectionException] if reflection service returns an error.
Future<List<String>> listServices({bool includeReflection = false}) async {
_ensureInitialized();
try {
final responseStream = _stub.serverReflectionInfo(
_createRequestStream([
ServerReflectionRequest()..listServices = '',
]),
);
final responses = await responseStream.toList();
if (responses.isEmpty) {
throw ReflectionException('No response from reflection service', 0);
}
final response = responses.first;
if (response.hasErrorResponse()) {
throw ReflectionException(
response.errorResponse.errorMessage,
response.errorResponse.errorCode,
);
}
List<String> services = response.listServicesResponse.service
.map((s) => s.name)
.toList();
if (!includeReflection) {
services = services
.where((s) => !s.contains('reflection'))
.toList();
}
return services;
} on GrpcError catch (e) {
throw ConnectionException('Failed to connect to ${config.address}: ${e.message}');
}
}
/// Gets file descriptors for a symbol (service, message, etc.).
///
/// Returns a list of [FileDescriptorProto] that define the symbol
/// and all its transitive dependencies.
///
/// Throws [ConnectionException] if connection fails.
/// Throws [ReflectionException] if symbol not found or other error.
Future<List<FileDescriptorProto>> getFileDescriptorsForSymbol(
String symbol,
) async {
_ensureInitialized();
try {
final responseStream = _stub.serverReflectionInfo(
_createRequestStream([
ServerReflectionRequest()..fileContainingSymbol = symbol,
]),
);
final responses = await responseStream.toList();
if (responses.isEmpty) {
throw ReflectionException('No response for symbol: $symbol', 0);
}
final response = responses.first;
if (response.hasErrorResponse()) {
throw ReflectionException(
response.errorResponse.errorMessage,
response.errorResponse.errorCode,
);
}
return response.fileDescriptorResponse.fileDescriptorProto
.map((bytes) => FileDescriptorProto.fromBuffer(bytes))
.toList();
} on GrpcError catch (e) {
throw ConnectionException('Failed to get descriptors: ${e.message}');
}
}
/// Gets file descriptors by filename.
///
/// Returns a list of [FileDescriptorProto] for the specified file
/// and its dependencies.
///
/// Throws [ConnectionException] if connection fails.
/// Throws [ReflectionException] if file not found or other error.
Future<List<FileDescriptorProto>> getFileDescriptorsByName(
String filename,
) async {
_ensureInitialized();
try {
final responseStream = _stub.serverReflectionInfo(
_createRequestStream([
ServerReflectionRequest()..fileByFilename = filename,
]),
);
final responses = await responseStream.toList();
if (responses.isEmpty) {
throw ReflectionException('No response for file: $filename', 0);
}
final response = responses.first;
if (response.hasErrorResponse()) {
throw ReflectionException(
response.errorResponse.errorMessage,
response.errorResponse.errorCode,
);
}
return response.fileDescriptorResponse.fileDescriptorProto
.map((bytes) => FileDescriptorProto.fromBuffer(bytes))
.toList();
} on GrpcError catch (e) {
throw ConnectionException('Failed to get file descriptor: ${e.message}');
}
}
/// Discovers all services and their methods.
///
/// Returns a list of [DiscoveredService] containing service names
/// and their method signatures.
///
/// This is a convenience method that combines [listServices] and
/// [getFileDescriptorsForSymbol] to provide detailed service information.
Future<List<DiscoveredService>> discoverAllServices() async {
final serviceNames = await listServices();
final List<DiscoveredService> discoveredServices = [];
for (final serviceName in serviceNames) {
try {
final descriptors = await getFileDescriptorsForSymbol(serviceName);
final methods = <DiscoveredMethod>[];
for (final descriptor in descriptors) {
for (final service in descriptor.service) {
// Match the service by fully qualified name
final fullName = descriptor.package.isEmpty
? service.name
: '${descriptor.package}.${service.name}';
if (fullName == serviceName) {
for (final method in service.method) {
methods.add(DiscoveredMethod(
name: method.name,
inputType: method.inputType,
outputType: method.outputType,
clientStreaming: method.clientStreaming,
serverStreaming: method.serverStreaming,
));
}
}
}
}
discoveredServices.add(DiscoveredService(
name: serviceName,
methods: methods,
));
} on GrpcDiscoveryException {
// If we can't get details for a service, add it with no methods
discoveredServices.add(DiscoveredService(
name: serviceName,
methods: const [],
));
}
}
return discoveredServices;
}
/// Discovers services matching a pattern.
///
/// Filters discovered services by name containing the [pattern].
/// Case-insensitive matching.
Future<List<DiscoveredService>> discoverServicesMatching(String pattern) async {
final services = await discoverAllServices();
final lowerPattern = pattern.toLowerCase();
return services
.where((s) => s.name.toLowerCase().contains(lowerPattern))
.toList();
}
Stream<ServerReflectionRequest> _createRequestStream(
List<ServerReflectionRequest> requests,
) async* {
for (final request in requests) {
yield request;
}
}
/// Closes the gRPC channel connection.
///
/// Should be called when done with discovery to release resources.
Future<void> close() async {
if (_isInitialized) {
await _channel.shutdown();
_isInitialized = false;
}
}
}
/// Utility function to discover and print gRPC services.
///
/// This is a convenience function for development and debugging.
/// Connects to the server specified in [config], discovers all services,
/// and prints them to the console.
///
/// Returns a map of service names to their discovered service details.
Future<Map<String, DiscoveredService>> discoverAndPrintServices({
GrpcConfig config = GrpcConfig.development,
}) async {
final discovery = GrpcDiscoveryClient(config: config);
try {
final services = await discovery.discoverAllServices();
final Map<String, DiscoveredService> result = {};
for (final service in services) {
result[service.name] = service;
}
return result;
} finally {
await discovery.close();
}
}

View File

@ -0,0 +1,821 @@
// Minimal FileDescriptorProto implementation for proto generation
// ignore_for_file: annotate_overrides, camel_case_types, constant_identifier_names
// ignore_for_file: non_constant_identifier_names, prefer_single_quotes, use_super_parameters
// Based on google/protobuf/descriptor.proto
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class FileDescriptorProto extends $pb.GeneratedMessage {
factory FileDescriptorProto({
$core.String? name,
$core.String? package,
$core.Iterable<$core.String>? dependency,
$core.Iterable<DescriptorProto>? messageType,
$core.Iterable<EnumDescriptorProto>? enumType,
$core.Iterable<ServiceDescriptorProto>? service,
$core.Iterable<FieldDescriptorProto>? extension,
FileOptions? options,
$core.String? syntax,
}) {
final result = create();
if (name != null) result.name = name;
if (package != null) result.package = package;
if (dependency != null) result.dependency.addAll(dependency);
if (messageType != null) result.messageType.addAll(messageType);
if (enumType != null) result.enumType.addAll(enumType);
if (service != null) result.service.addAll(service);
if (extension != null) result.extension.addAll(extension);
if (options != null) result.options = options;
if (syntax != null) result.syntax = syntax;
return result;
}
FileDescriptorProto._() : super();
factory FileDescriptorProto.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo('FileDescriptorProto',
package: const $pb.PackageName('google.protobuf'),
createEmptyInstance: create)
..aOS(1, 'name')
..aOS(2, 'package')
..pPS(3, 'dependency')
..pc<DescriptorProto>(4, 'messageType', $pb.PbFieldType.PM,
subBuilder: DescriptorProto.create)
..pc<EnumDescriptorProto>(5, 'enumType', $pb.PbFieldType.PM,
subBuilder: EnumDescriptorProto.create)
..pc<ServiceDescriptorProto>(6, 'service', $pb.PbFieldType.PM,
subBuilder: ServiceDescriptorProto.create)
..pc<FieldDescriptorProto>(7, 'extension', $pb.PbFieldType.PM,
subBuilder: FieldDescriptorProto.create)
..aOM<FileOptions>(8, 'options', subBuilder: FileOptions.create)
..aOS(12, 'syntax')
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
FileDescriptorProto createEmptyInstance() => create();
static FileDescriptorProto create() => FileDescriptorProto._();
@$core.override
FileDescriptorProto clone() => FileDescriptorProto()..mergeFromMessage(this);
@$pb.TagNumber(1)
$core.String get name => $_getSZ(0);
@$pb.TagNumber(1)
set name($core.String v) => $_setString(0, v);
@$pb.TagNumber(1)
$core.bool hasName() => $_has(0);
@$pb.TagNumber(2)
$core.String get package => $_getSZ(1);
@$pb.TagNumber(2)
set package($core.String v) => $_setString(1, v);
@$pb.TagNumber(2)
$core.bool hasPackage() => $_has(1);
@$pb.TagNumber(3)
$core.List<$core.String> get dependency => $_getList(2);
@$pb.TagNumber(4)
$core.List<DescriptorProto> get messageType => $_getList(3);
@$pb.TagNumber(5)
$core.List<EnumDescriptorProto> get enumType => $_getList(4);
@$pb.TagNumber(6)
$core.List<ServiceDescriptorProto> get service => $_getList(5);
@$pb.TagNumber(7)
$core.List<FieldDescriptorProto> get extension => $_getList(6);
@$pb.TagNumber(8)
FileOptions get options => $_getN(7);
@$pb.TagNumber(8)
set options(FileOptions v) => setField(8, v);
@$pb.TagNumber(8)
$core.bool hasOptions() => $_has(7);
@$pb.TagNumber(8)
FileOptions ensureOptions() => $_ensure(7);
@$pb.TagNumber(12)
$core.String get syntax => $_getSZ(8);
@$pb.TagNumber(12)
set syntax($core.String v) => $_setString(8, v);
@$pb.TagNumber(12)
$core.bool hasSyntax() => $_has(8);
}
class DescriptorProto extends $pb.GeneratedMessage {
factory DescriptorProto({
$core.String? name,
$core.Iterable<FieldDescriptorProto>? field,
$core.Iterable<FieldDescriptorProto>? extension,
$core.Iterable<DescriptorProto>? nestedType,
$core.Iterable<EnumDescriptorProto>? enumType,
$core.Iterable<DescriptorProto_ReservedRange>? reservedRange,
$core.Iterable<$core.String>? reservedName,
$core.Iterable<OneofDescriptorProto>? oneofDecl,
MessageOptions? options,
}) {
final result = create();
if (name != null) result.name = name;
if (field != null) result.field.addAll(field);
if (extension != null) result.extension.addAll(extension);
if (nestedType != null) result.nestedType.addAll(nestedType);
if (enumType != null) result.enumType.addAll(enumType);
if (reservedRange != null) result.reservedRange.addAll(reservedRange);
if (reservedName != null) result.reservedName.addAll(reservedName);
if (oneofDecl != null) result.oneofDecl.addAll(oneofDecl);
if (options != null) result.options = options;
return result;
}
DescriptorProto._() : super();
factory DescriptorProto.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo('DescriptorProto',
package: const $pb.PackageName('google.protobuf'),
createEmptyInstance: create)
..aOS(1, 'name')
..pc<FieldDescriptorProto>(2, 'field', $pb.PbFieldType.PM,
subBuilder: FieldDescriptorProto.create)
..pc<FieldDescriptorProto>(6, 'extension', $pb.PbFieldType.PM,
subBuilder: FieldDescriptorProto.create)
..pc<DescriptorProto>(3, 'nestedType', $pb.PbFieldType.PM,
subBuilder: DescriptorProto.create)
..pc<EnumDescriptorProto>(4, 'enumType', $pb.PbFieldType.PM,
subBuilder: EnumDescriptorProto.create)
..pc<DescriptorProto_ReservedRange>(9, 'reservedRange', $pb.PbFieldType.PM,
subBuilder: DescriptorProto_ReservedRange.create)
..pPS(10, 'reservedName')
..pc<OneofDescriptorProto>(8, 'oneofDecl', $pb.PbFieldType.PM,
subBuilder: OneofDescriptorProto.create)
..aOM<MessageOptions>(7, 'options', subBuilder: MessageOptions.create)
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
DescriptorProto createEmptyInstance() => create();
static DescriptorProto create() => DescriptorProto._();
@$core.override
DescriptorProto clone() => DescriptorProto()..mergeFromMessage(this);
@$pb.TagNumber(1)
$core.String get name => $_getSZ(0);
@$pb.TagNumber(1)
set name($core.String v) => $_setString(0, v);
@$pb.TagNumber(2)
$core.List<FieldDescriptorProto> get field => $_getList(1);
@$pb.TagNumber(6)
$core.List<FieldDescriptorProto> get extension => $_getList(2);
@$pb.TagNumber(3)
$core.List<DescriptorProto> get nestedType => $_getList(3);
@$pb.TagNumber(4)
$core.List<EnumDescriptorProto> get enumType => $_getList(4);
@$pb.TagNumber(9)
$core.List<DescriptorProto_ReservedRange> get reservedRange => $_getList(5);
@$pb.TagNumber(10)
$core.List<$core.String> get reservedName => $_getList(6);
@$pb.TagNumber(8)
$core.List<OneofDescriptorProto> get oneofDecl => $_getList(7);
@$pb.TagNumber(7)
MessageOptions get options => $_getN(8);
@$pb.TagNumber(7)
set options(MessageOptions v) => setField(7, v);
@$pb.TagNumber(7)
$core.bool hasOptions() => $_has(8);
@$pb.TagNumber(7)
MessageOptions ensureOptions() => $_ensure(8);
}
class DescriptorProto_ReservedRange extends $pb.GeneratedMessage {
factory DescriptorProto_ReservedRange({$core.int? start, $core.int? end}) {
final result = create();
if (start != null) result.start = start;
if (end != null) result.end = end;
return result;
}
DescriptorProto_ReservedRange._() : super();
factory DescriptorProto_ReservedRange.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo('DescriptorProto.ReservedRange',
package: const $pb.PackageName('google.protobuf'),
createEmptyInstance: create)
..a<$core.int>(1, 'start', $pb.PbFieldType.O3)
..a<$core.int>(2, 'end', $pb.PbFieldType.O3)
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
DescriptorProto_ReservedRange createEmptyInstance() => create();
static DescriptorProto_ReservedRange create() => DescriptorProto_ReservedRange._();
@$core.override
DescriptorProto_ReservedRange clone() => DescriptorProto_ReservedRange()..mergeFromMessage(this);
@$pb.TagNumber(1)
$core.int get start => $_getIZ(0);
@$pb.TagNumber(1)
set start($core.int v) => $_setSignedInt32(0, v);
@$pb.TagNumber(2)
$core.int get end => $_getIZ(1);
@$pb.TagNumber(2)
set end($core.int v) => $_setSignedInt32(1, v);
}
class FieldDescriptorProto extends $pb.GeneratedMessage {
factory FieldDescriptorProto({
$core.String? name,
$core.int? number,
FieldDescriptorProto_Label? label,
FieldDescriptorProto_Type? type,
$core.String? typeName,
$core.String? extendee,
$core.String? defaultValue,
$core.int? oneofIndex,
$core.String? jsonName,
FieldOptions? options,
$core.bool? proto3Optional,
}) {
final result = create();
if (name != null) result.name = name;
if (number != null) result.number = number;
if (label != null) result.label = label;
if (type != null) result.type = type;
if (typeName != null) result.typeName = typeName;
if (extendee != null) result.extendee = extendee;
if (defaultValue != null) result.defaultValue = defaultValue;
if (oneofIndex != null) result.oneofIndex = oneofIndex;
if (jsonName != null) result.jsonName = jsonName;
if (options != null) result.options = options;
if (proto3Optional != null) result.proto3Optional = proto3Optional;
return result;
}
FieldDescriptorProto._() : super();
factory FieldDescriptorProto.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo('FieldDescriptorProto',
package: const $pb.PackageName('google.protobuf'),
createEmptyInstance: create)
..aOS(1, 'name')
..a<$core.int>(3, 'number', $pb.PbFieldType.O3)
..e<FieldDescriptorProto_Label>(4, 'label', $pb.PbFieldType.OE,
defaultOrMaker: FieldDescriptorProto_Label.LABEL_OPTIONAL,
valueOf: FieldDescriptorProto_Label.valueOf,
enumValues: FieldDescriptorProto_Label.values)
..e<FieldDescriptorProto_Type>(5, 'type', $pb.PbFieldType.OE,
defaultOrMaker: FieldDescriptorProto_Type.TYPE_DOUBLE,
valueOf: FieldDescriptorProto_Type.valueOf,
enumValues: FieldDescriptorProto_Type.values)
..aOS(6, 'typeName')
..aOS(2, 'extendee')
..aOS(7, 'defaultValue')
..a<$core.int>(9, 'oneofIndex', $pb.PbFieldType.O3)
..aOS(10, 'jsonName')
..aOM<FieldOptions>(8, 'options', subBuilder: FieldOptions.create)
..aOB(17, 'proto3Optional')
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
FieldDescriptorProto createEmptyInstance() => create();
static FieldDescriptorProto create() => FieldDescriptorProto._();
@$core.override
FieldDescriptorProto clone() => FieldDescriptorProto()..mergeFromMessage(this);
@$pb.TagNumber(1)
$core.String get name => $_getSZ(0);
@$pb.TagNumber(1)
set name($core.String v) => $_setString(0, v);
@$pb.TagNumber(3)
$core.int get number => $_getIZ(1);
@$pb.TagNumber(3)
set number($core.int v) => $_setSignedInt32(1, v);
@$pb.TagNumber(4)
FieldDescriptorProto_Label get label => $_getN(2);
@$pb.TagNumber(4)
set label(FieldDescriptorProto_Label v) => setField(4, v);
@$pb.TagNumber(4)
$core.bool hasLabel() => $_has(2);
@$pb.TagNumber(5)
FieldDescriptorProto_Type get type => $_getN(3);
@$pb.TagNumber(5)
set type(FieldDescriptorProto_Type v) => setField(5, v);
@$pb.TagNumber(5)
$core.bool hasType() => $_has(3);
@$pb.TagNumber(6)
$core.String get typeName => $_getSZ(4);
@$pb.TagNumber(6)
set typeName($core.String v) => $_setString(4, v);
@$pb.TagNumber(6)
$core.bool hasTypeName() => $_has(4);
@$pb.TagNumber(2)
$core.String get extendee => $_getSZ(5);
@$pb.TagNumber(2)
set extendee($core.String v) => $_setString(5, v);
@$pb.TagNumber(7)
$core.String get defaultValue => $_getSZ(6);
@$pb.TagNumber(7)
set defaultValue($core.String v) => $_setString(6, v);
@$pb.TagNumber(9)
$core.int get oneofIndex => $_getIZ(7);
@$pb.TagNumber(9)
set oneofIndex($core.int v) => $_setSignedInt32(7, v);
@$pb.TagNumber(9)
$core.bool hasOneofIndex() => $_has(7);
@$pb.TagNumber(10)
$core.String get jsonName => $_getSZ(8);
@$pb.TagNumber(10)
set jsonName($core.String v) => $_setString(8, v);
@$pb.TagNumber(10)
$core.bool hasJsonName() => $_has(8);
@$pb.TagNumber(8)
FieldOptions get options => $_getN(9);
@$pb.TagNumber(8)
set options(FieldOptions v) => setField(8, v);
@$pb.TagNumber(8)
$core.bool hasOptions() => $_has(9);
@$pb.TagNumber(8)
FieldOptions ensureOptions() => $_ensure(9);
@$pb.TagNumber(17)
$core.bool get proto3Optional => $_getBF(10);
@$pb.TagNumber(17)
set proto3Optional($core.bool v) => $_setBool(10, v);
@$pb.TagNumber(17)
$core.bool hasProto3Optional() => $_has(10);
}
class FieldDescriptorProto_Type extends $pb.ProtobufEnum {
static const FieldDescriptorProto_Type TYPE_DOUBLE = FieldDescriptorProto_Type._(1, 'TYPE_DOUBLE');
static const FieldDescriptorProto_Type TYPE_FLOAT = FieldDescriptorProto_Type._(2, 'TYPE_FLOAT');
static const FieldDescriptorProto_Type TYPE_INT64 = FieldDescriptorProto_Type._(3, 'TYPE_INT64');
static const FieldDescriptorProto_Type TYPE_UINT64 = FieldDescriptorProto_Type._(4, 'TYPE_UINT64');
static const FieldDescriptorProto_Type TYPE_INT32 = FieldDescriptorProto_Type._(5, 'TYPE_INT32');
static const FieldDescriptorProto_Type TYPE_FIXED64 = FieldDescriptorProto_Type._(6, 'TYPE_FIXED64');
static const FieldDescriptorProto_Type TYPE_FIXED32 = FieldDescriptorProto_Type._(7, 'TYPE_FIXED32');
static const FieldDescriptorProto_Type TYPE_BOOL = FieldDescriptorProto_Type._(8, 'TYPE_BOOL');
static const FieldDescriptorProto_Type TYPE_STRING = FieldDescriptorProto_Type._(9, 'TYPE_STRING');
static const FieldDescriptorProto_Type TYPE_GROUP = FieldDescriptorProto_Type._(10, 'TYPE_GROUP');
static const FieldDescriptorProto_Type TYPE_MESSAGE = FieldDescriptorProto_Type._(11, 'TYPE_MESSAGE');
static const FieldDescriptorProto_Type TYPE_BYTES = FieldDescriptorProto_Type._(12, 'TYPE_BYTES');
static const FieldDescriptorProto_Type TYPE_UINT32 = FieldDescriptorProto_Type._(13, 'TYPE_UINT32');
static const FieldDescriptorProto_Type TYPE_ENUM = FieldDescriptorProto_Type._(14, 'TYPE_ENUM');
static const FieldDescriptorProto_Type TYPE_SFIXED32 = FieldDescriptorProto_Type._(15, 'TYPE_SFIXED32');
static const FieldDescriptorProto_Type TYPE_SFIXED64 = FieldDescriptorProto_Type._(16, 'TYPE_SFIXED64');
static const FieldDescriptorProto_Type TYPE_SINT32 = FieldDescriptorProto_Type._(17, 'TYPE_SINT32');
static const FieldDescriptorProto_Type TYPE_SINT64 = FieldDescriptorProto_Type._(18, 'TYPE_SINT64');
static const $core.List<FieldDescriptorProto_Type> values = [
TYPE_DOUBLE, TYPE_FLOAT, TYPE_INT64, TYPE_UINT64, TYPE_INT32,
TYPE_FIXED64, TYPE_FIXED32, TYPE_BOOL, TYPE_STRING, TYPE_GROUP,
TYPE_MESSAGE, TYPE_BYTES, TYPE_UINT32, TYPE_ENUM, TYPE_SFIXED32,
TYPE_SFIXED64, TYPE_SINT32, TYPE_SINT64,
];
static final $core.Map<$core.int, FieldDescriptorProto_Type> _byValue = $pb.ProtobufEnum.initByValue(values);
static FieldDescriptorProto_Type? valueOf($core.int value) => _byValue[value];
const FieldDescriptorProto_Type._($core.int v, $core.String n) : super(v, n);
}
class FieldDescriptorProto_Label extends $pb.ProtobufEnum {
static const FieldDescriptorProto_Label LABEL_OPTIONAL = FieldDescriptorProto_Label._(1, 'LABEL_OPTIONAL');
static const FieldDescriptorProto_Label LABEL_REQUIRED = FieldDescriptorProto_Label._(2, 'LABEL_REQUIRED');
static const FieldDescriptorProto_Label LABEL_REPEATED = FieldDescriptorProto_Label._(3, 'LABEL_REPEATED');
static const $core.List<FieldDescriptorProto_Label> values = [LABEL_OPTIONAL, LABEL_REQUIRED, LABEL_REPEATED];
static final $core.Map<$core.int, FieldDescriptorProto_Label> _byValue = $pb.ProtobufEnum.initByValue(values);
static FieldDescriptorProto_Label? valueOf($core.int value) => _byValue[value];
const FieldDescriptorProto_Label._($core.int v, $core.String n) : super(v, n);
}
class EnumDescriptorProto extends $pb.GeneratedMessage {
factory EnumDescriptorProto({
$core.String? name,
$core.Iterable<EnumValueDescriptorProto>? value,
EnumOptions? options,
}) {
final result = create();
if (name != null) result.name = name;
if (value != null) result.value.addAll(value);
if (options != null) result.options = options;
return result;
}
EnumDescriptorProto._() : super();
factory EnumDescriptorProto.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo('EnumDescriptorProto',
package: const $pb.PackageName('google.protobuf'),
createEmptyInstance: create)
..aOS(1, 'name')
..pc<EnumValueDescriptorProto>(2, 'value', $pb.PbFieldType.PM,
subBuilder: EnumValueDescriptorProto.create)
..aOM<EnumOptions>(3, 'options', subBuilder: EnumOptions.create)
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
EnumDescriptorProto createEmptyInstance() => create();
static EnumDescriptorProto create() => EnumDescriptorProto._();
@$core.override
EnumDescriptorProto clone() => EnumDescriptorProto()..mergeFromMessage(this);
@$pb.TagNumber(1)
$core.String get name => $_getSZ(0);
@$pb.TagNumber(1)
set name($core.String v) => $_setString(0, v);
@$pb.TagNumber(2)
$core.List<EnumValueDescriptorProto> get value => $_getList(1);
@$pb.TagNumber(3)
EnumOptions get options => $_getN(2);
@$pb.TagNumber(3)
set options(EnumOptions v) => setField(3, v);
@$pb.TagNumber(3)
$core.bool hasOptions() => $_has(2);
}
class EnumValueDescriptorProto extends $pb.GeneratedMessage {
factory EnumValueDescriptorProto({$core.String? name, $core.int? number}) {
final result = create();
if (name != null) result.name = name;
if (number != null) result.number = number;
return result;
}
EnumValueDescriptorProto._() : super();
factory EnumValueDescriptorProto.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo('EnumValueDescriptorProto',
package: const $pb.PackageName('google.protobuf'),
createEmptyInstance: create)
..aOS(1, 'name')
..a<$core.int>(2, 'number', $pb.PbFieldType.O3)
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
EnumValueDescriptorProto createEmptyInstance() => create();
static EnumValueDescriptorProto create() => EnumValueDescriptorProto._();
@$core.override
EnumValueDescriptorProto clone() => EnumValueDescriptorProto()..mergeFromMessage(this);
@$pb.TagNumber(1)
$core.String get name => $_getSZ(0);
@$pb.TagNumber(1)
set name($core.String v) => $_setString(0, v);
@$pb.TagNumber(2)
$core.int get number => $_getIZ(1);
@$pb.TagNumber(2)
set number($core.int v) => $_setSignedInt32(1, v);
}
class ServiceDescriptorProto extends $pb.GeneratedMessage {
factory ServiceDescriptorProto({
$core.String? name,
$core.Iterable<MethodDescriptorProto>? method,
ServiceOptions? options,
}) {
final result = create();
if (name != null) result.name = name;
if (method != null) result.method.addAll(method);
if (options != null) result.options = options;
return result;
}
ServiceDescriptorProto._() : super();
factory ServiceDescriptorProto.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo('ServiceDescriptorProto',
package: const $pb.PackageName('google.protobuf'),
createEmptyInstance: create)
..aOS(1, 'name')
..pc<MethodDescriptorProto>(2, 'method', $pb.PbFieldType.PM,
subBuilder: MethodDescriptorProto.create)
..aOM<ServiceOptions>(3, 'options', subBuilder: ServiceOptions.create)
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
ServiceDescriptorProto createEmptyInstance() => create();
static ServiceDescriptorProto create() => ServiceDescriptorProto._();
@$core.override
ServiceDescriptorProto clone() => ServiceDescriptorProto()..mergeFromMessage(this);
@$pb.TagNumber(1)
$core.String get name => $_getSZ(0);
@$pb.TagNumber(1)
set name($core.String v) => $_setString(0, v);
@$pb.TagNumber(2)
$core.List<MethodDescriptorProto> get method => $_getList(1);
@$pb.TagNumber(3)
ServiceOptions get options => $_getN(2);
@$pb.TagNumber(3)
set options(ServiceOptions v) => setField(3, v);
@$pb.TagNumber(3)
$core.bool hasOptions() => $_has(2);
}
class MethodDescriptorProto extends $pb.GeneratedMessage {
factory MethodDescriptorProto({
$core.String? name,
$core.String? inputType,
$core.String? outputType,
MethodOptions? options,
$core.bool? clientStreaming,
$core.bool? serverStreaming,
}) {
final result = create();
if (name != null) result.name = name;
if (inputType != null) result.inputType = inputType;
if (outputType != null) result.outputType = outputType;
if (options != null) result.options = options;
if (clientStreaming != null) result.clientStreaming = clientStreaming;
if (serverStreaming != null) result.serverStreaming = serverStreaming;
return result;
}
MethodDescriptorProto._() : super();
factory MethodDescriptorProto.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo('MethodDescriptorProto',
package: const $pb.PackageName('google.protobuf'),
createEmptyInstance: create)
..aOS(1, 'name')
..aOS(2, 'inputType')
..aOS(3, 'outputType')
..aOM<MethodOptions>(4, 'options', subBuilder: MethodOptions.create)
..aOB(5, 'clientStreaming')
..aOB(6, 'serverStreaming')
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
MethodDescriptorProto createEmptyInstance() => create();
static MethodDescriptorProto create() => MethodDescriptorProto._();
@$core.override
MethodDescriptorProto clone() => MethodDescriptorProto()..mergeFromMessage(this);
@$pb.TagNumber(1)
$core.String get name => $_getSZ(0);
@$pb.TagNumber(1)
set name($core.String v) => $_setString(0, v);
@$pb.TagNumber(2)
$core.String get inputType => $_getSZ(1);
@$pb.TagNumber(2)
set inputType($core.String v) => $_setString(1, v);
@$pb.TagNumber(3)
$core.String get outputType => $_getSZ(2);
@$pb.TagNumber(3)
set outputType($core.String v) => $_setString(2, v);
@$pb.TagNumber(4)
MethodOptions get options => $_getN(3);
@$pb.TagNumber(4)
set options(MethodOptions v) => setField(4, v);
@$pb.TagNumber(4)
$core.bool hasOptions() => $_has(3);
@$pb.TagNumber(5)
$core.bool get clientStreaming => $_getBF(4);
@$pb.TagNumber(5)
set clientStreaming($core.bool v) => $_setBool(4, v);
@$pb.TagNumber(6)
$core.bool get serverStreaming => $_getBF(5);
@$pb.TagNumber(6)
set serverStreaming($core.bool v) => $_setBool(5, v);
}
class OneofDescriptorProto extends $pb.GeneratedMessage {
factory OneofDescriptorProto({$core.String? name}) {
final result = create();
if (name != null) result.name = name;
return result;
}
OneofDescriptorProto._() : super();
factory OneofDescriptorProto.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo('OneofDescriptorProto',
package: const $pb.PackageName('google.protobuf'),
createEmptyInstance: create)
..aOS(1, 'name')
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
OneofDescriptorProto createEmptyInstance() => create();
static OneofDescriptorProto create() => OneofDescriptorProto._();
@$core.override
OneofDescriptorProto clone() => OneofDescriptorProto()..mergeFromMessage(this);
@$pb.TagNumber(1)
$core.String get name => $_getSZ(0);
@$pb.TagNumber(1)
set name($core.String v) => $_setString(0, v);
}
// Options classes - minimal implementations
class FileOptions extends $pb.GeneratedMessage {
FileOptions._() : super();
factory FileOptions.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo('FileOptions',
package: const $pb.PackageName('google.protobuf'),
createEmptyInstance: create)
..aOS(1, 'javaPackage')
..aOS(8, 'javaOuterClassname')
..aOB(10, 'javaMultipleFiles')
..aOS(11, 'goPackage')
..aOS(37, 'csharpNamespace')
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
FileOptions createEmptyInstance() => create();
static FileOptions create() => FileOptions._();
@$core.override
FileOptions clone() => create()..mergeFromMessage(this);
@$pb.TagNumber(1)
$core.String get javaPackage => $_getSZ(0);
@$pb.TagNumber(8)
$core.String get javaOuterClassname => $_getSZ(1);
@$pb.TagNumber(10)
$core.bool get javaMultipleFiles => $_getBF(2);
@$pb.TagNumber(11)
$core.String get goPackage => $_getSZ(3);
@$pb.TagNumber(37)
$core.String get csharpNamespace => $_getSZ(4);
}
class MessageOptions extends $pb.GeneratedMessage {
MessageOptions._() : super();
factory MessageOptions.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo('MessageOptions',
package: const $pb.PackageName('google.protobuf'),
createEmptyInstance: create)
..aOB(7, 'mapEntry')
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
MessageOptions createEmptyInstance() => create();
static MessageOptions create() => MessageOptions._();
@$core.override
MessageOptions clone() => create()..mergeFromMessage(this);
@$pb.TagNumber(7)
$core.bool get mapEntry => $_getBF(0);
}
class FieldOptions extends $pb.GeneratedMessage {
FieldOptions._() : super();
factory FieldOptions.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo('FieldOptions',
package: const $pb.PackageName('google.protobuf'),
createEmptyInstance: create)
..aOB(2, 'packed')
..aOB(3, 'deprecated')
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
FieldOptions createEmptyInstance() => create();
static FieldOptions create() => FieldOptions._();
@$core.override
FieldOptions clone() => create()..mergeFromMessage(this);
@$pb.TagNumber(2)
$core.bool get packed => $_getBF(0);
@$pb.TagNumber(3)
$core.bool get deprecated => $_getBF(1);
}
class EnumOptions extends $pb.GeneratedMessage {
EnumOptions._() : super();
static final $pb.BuilderInfo _i = $pb.BuilderInfo('EnumOptions',
package: const $pb.PackageName('google.protobuf'),
createEmptyInstance: create)
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
EnumOptions createEmptyInstance() => create();
static EnumOptions create() => EnumOptions._();
@$core.override
EnumOptions clone() => create()..mergeFromMessage(this);
}
class ServiceOptions extends $pb.GeneratedMessage {
ServiceOptions._() : super();
static final $pb.BuilderInfo _i = $pb.BuilderInfo('ServiceOptions',
package: const $pb.PackageName('google.protobuf'),
createEmptyInstance: create)
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
ServiceOptions createEmptyInstance() => create();
static ServiceOptions create() => ServiceOptions._();
@$core.override
ServiceOptions clone() => create()..mergeFromMessage(this);
}
class MethodOptions extends $pb.GeneratedMessage {
MethodOptions._() : super();
static final $pb.BuilderInfo _i = $pb.BuilderInfo('MethodOptions',
package: const $pb.PackageName('google.protobuf'),
createEmptyInstance: create)
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
MethodOptions createEmptyInstance() => create();
static MethodOptions create() => MethodOptions._();
@$core.override
MethodOptions clone() => create()..mergeFromMessage(this);
}

View File

@ -0,0 +1,571 @@
// Generated code - do not modify
// ignore_for_file: annotate_overrides, camel_case_types, constant_identifier_names
// ignore_for_file: non_constant_identifier_names, avoid_print
// Based on grpc.reflection.v1alpha.reflection.proto
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
enum ServerReflectionRequest_MessageRequest {
fileByFilename,
fileContainingSymbol,
fileContainingExtension,
allExtensionNumbersOfType,
listServices,
notSet
}
class ServerReflectionRequest extends $pb.GeneratedMessage {
factory ServerReflectionRequest({
$core.String? host,
$core.String? fileByFilename,
$core.String? fileContainingSymbol,
ExtensionRequest? fileContainingExtension,
$core.String? allExtensionNumbersOfType,
$core.String? listServices,
}) {
final result = create();
if (host != null) result.host = host;
if (fileByFilename != null) result.fileByFilename = fileByFilename;
if (fileContainingSymbol != null) result.fileContainingSymbol = fileContainingSymbol;
if (fileContainingExtension != null) result.fileContainingExtension = fileContainingExtension;
if (allExtensionNumbersOfType != null) result.allExtensionNumbersOfType = allExtensionNumbersOfType;
if (listServices != null) result.listServices = listServices;
return result;
}
ServerReflectionRequest._() : super();
factory ServerReflectionRequest.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
factory ServerReflectionRequest.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
static const $core.Map<$core.int, ServerReflectionRequest_MessageRequest>
_ServerReflectionRequest_MessageRequestByTag = {
3: ServerReflectionRequest_MessageRequest.fileByFilename,
4: ServerReflectionRequest_MessageRequest.fileContainingSymbol,
5: ServerReflectionRequest_MessageRequest.fileContainingExtension,
6: ServerReflectionRequest_MessageRequest.allExtensionNumbersOfType,
7: ServerReflectionRequest_MessageRequest.listServices,
0: ServerReflectionRequest_MessageRequest.notSet
};
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
'ServerReflectionRequest',
package: const $pb.PackageName('grpc.reflection.v1alpha'),
createEmptyInstance: create)
..oo(0, [3, 4, 5, 6, 7])
..aOS(1, 'host')
..aOS(3, 'fileByFilename')
..aOS(4, 'fileContainingSymbol')
..aOM<ExtensionRequest>(5, 'fileContainingExtension',
subBuilder: ExtensionRequest.create)
..aOS(6, 'allExtensionNumbersOfType')
..aOS(7, 'listServices')
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
ServerReflectionRequest createEmptyInstance() => create();
static ServerReflectionRequest create() => ServerReflectionRequest._();
@$core.override
ServerReflectionRequest clone() => ServerReflectionRequest()..mergeFromMessage(this);
static $core.List<ServerReflectionRequest> createRepeated() => <ServerReflectionRequest>[];
ServerReflectionRequest_MessageRequest whichMessageRequest() =>
_ServerReflectionRequest_MessageRequestByTag[$_whichOneof(0)] ??
ServerReflectionRequest_MessageRequest.notSet;
void clearMessageRequest() => clearField($_whichOneof(0));
@$pb.TagNumber(1)
$core.String get host => $_getSZ(0);
@$pb.TagNumber(1)
set host($core.String v) => $_setString(0, v);
@$pb.TagNumber(1)
$core.bool hasHost() => $_has(0);
@$pb.TagNumber(1)
void clearHost() => clearField(1);
@$pb.TagNumber(3)
$core.String get fileByFilename => $_getSZ(1);
@$pb.TagNumber(3)
set fileByFilename($core.String v) => $_setString(1, v);
@$pb.TagNumber(3)
$core.bool hasFileByFilename() => $_has(1);
@$pb.TagNumber(3)
void clearFileByFilename() => clearField(3);
@$pb.TagNumber(4)
$core.String get fileContainingSymbol => $_getSZ(2);
@$pb.TagNumber(4)
set fileContainingSymbol($core.String v) => $_setString(2, v);
@$pb.TagNumber(4)
$core.bool hasFileContainingSymbol() => $_has(2);
@$pb.TagNumber(4)
void clearFileContainingSymbol() => clearField(4);
@$pb.TagNumber(5)
ExtensionRequest get fileContainingExtension => $_getN(3);
@$pb.TagNumber(5)
set fileContainingExtension(ExtensionRequest v) => setField(5, v);
@$pb.TagNumber(5)
$core.bool hasFileContainingExtension() => $_has(3);
@$pb.TagNumber(5)
void clearFileContainingExtension() => clearField(5);
@$pb.TagNumber(5)
ExtensionRequest ensureFileContainingExtension() => $_ensure(3);
@$pb.TagNumber(6)
$core.String get allExtensionNumbersOfType => $_getSZ(4);
@$pb.TagNumber(6)
set allExtensionNumbersOfType($core.String v) => $_setString(4, v);
@$pb.TagNumber(6)
$core.bool hasAllExtensionNumbersOfType() => $_has(4);
@$pb.TagNumber(6)
void clearAllExtensionNumbersOfType() => clearField(6);
@$pb.TagNumber(7)
$core.String get listServices => $_getSZ(5);
@$pb.TagNumber(7)
set listServices($core.String v) => $_setString(5, v);
@$pb.TagNumber(7)
$core.bool hasListServices() => $_has(5);
@$pb.TagNumber(7)
void clearListServices() => clearField(7);
}
class ExtensionRequest extends $pb.GeneratedMessage {
factory ExtensionRequest({
$core.String? containingType,
$core.int? extensionNumber,
}) {
final result = create();
if (containingType != null) result.containingType = containingType;
if (extensionNumber != null) result.extensionNumber = extensionNumber;
return result;
}
ExtensionRequest._() : super();
factory ExtensionRequest.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo('ExtensionRequest',
package: const $pb.PackageName('grpc.reflection.v1alpha'),
createEmptyInstance: create)
..aOS(1, 'containingType')
..a<$core.int>(2, 'extensionNumber', $pb.PbFieldType.O3)
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
ExtensionRequest createEmptyInstance() => create();
static ExtensionRequest create() => ExtensionRequest._();
@$core.override
ExtensionRequest clone() => ExtensionRequest()..mergeFromMessage(this);
static $core.List<ExtensionRequest> createRepeated() => <ExtensionRequest>[];
@$pb.TagNumber(1)
$core.String get containingType => $_getSZ(0);
@$pb.TagNumber(1)
set containingType($core.String v) => $_setString(0, v);
@$pb.TagNumber(1)
$core.bool hasContainingType() => $_has(0);
@$pb.TagNumber(1)
void clearContainingType() => clearField(1);
@$pb.TagNumber(2)
$core.int get extensionNumber => $_getIZ(1);
@$pb.TagNumber(2)
set extensionNumber($core.int v) => $_setSignedInt32(1, v);
@$pb.TagNumber(2)
$core.bool hasExtensionNumber() => $_has(1);
@$pb.TagNumber(2)
void clearExtensionNumber() => clearField(2);
}
enum ServerReflectionResponse_MessageResponse {
fileDescriptorResponse,
allExtensionNumbersResponse,
listServicesResponse,
errorResponse,
notSet
}
class ServerReflectionResponse extends $pb.GeneratedMessage {
factory ServerReflectionResponse({
$core.String? validHost,
ServerReflectionRequest? originalRequest,
FileDescriptorResponse? fileDescriptorResponse,
ExtensionNumberResponse? allExtensionNumbersResponse,
ListServiceResponse? listServicesResponse,
ErrorResponse? errorResponse,
}) {
final result = create();
if (validHost != null) result.validHost = validHost;
if (originalRequest != null) result.originalRequest = originalRequest;
if (fileDescriptorResponse != null) result.fileDescriptorResponse = fileDescriptorResponse;
if (allExtensionNumbersResponse != null) result.allExtensionNumbersResponse = allExtensionNumbersResponse;
if (listServicesResponse != null) result.listServicesResponse = listServicesResponse;
if (errorResponse != null) result.errorResponse = errorResponse;
return result;
}
ServerReflectionResponse._() : super();
factory ServerReflectionResponse.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static const $core.Map<$core.int, ServerReflectionResponse_MessageResponse>
_ServerReflectionResponse_MessageResponseByTag = {
4: ServerReflectionResponse_MessageResponse.fileDescriptorResponse,
5: ServerReflectionResponse_MessageResponse.allExtensionNumbersResponse,
6: ServerReflectionResponse_MessageResponse.listServicesResponse,
7: ServerReflectionResponse_MessageResponse.errorResponse,
0: ServerReflectionResponse_MessageResponse.notSet
};
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
'ServerReflectionResponse',
package: const $pb.PackageName('grpc.reflection.v1alpha'),
createEmptyInstance: create)
..oo(0, [4, 5, 6, 7])
..aOS(1, 'validHost')
..aOM<ServerReflectionRequest>(2, 'originalRequest',
subBuilder: ServerReflectionRequest.create)
..aOM<FileDescriptorResponse>(4, 'fileDescriptorResponse',
subBuilder: FileDescriptorResponse.create)
..aOM<ExtensionNumberResponse>(5, 'allExtensionNumbersResponse',
subBuilder: ExtensionNumberResponse.create)
..aOM<ListServiceResponse>(6, 'listServicesResponse',
subBuilder: ListServiceResponse.create)
..aOM<ErrorResponse>(7, 'errorResponse', subBuilder: ErrorResponse.create)
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
ServerReflectionResponse createEmptyInstance() => create();
static ServerReflectionResponse create() => ServerReflectionResponse._();
@$core.override
ServerReflectionResponse clone() => ServerReflectionResponse()..mergeFromMessage(this);
static $core.List<ServerReflectionResponse> createRepeated() => <ServerReflectionResponse>[];
ServerReflectionResponse_MessageResponse whichMessageResponse() =>
_ServerReflectionResponse_MessageResponseByTag[$_whichOneof(0)] ??
ServerReflectionResponse_MessageResponse.notSet;
void clearMessageResponse() => clearField($_whichOneof(0));
@$pb.TagNumber(1)
$core.String get validHost => $_getSZ(0);
@$pb.TagNumber(1)
set validHost($core.String v) => $_setString(0, v);
@$pb.TagNumber(1)
$core.bool hasValidHost() => $_has(0);
@$pb.TagNumber(1)
void clearValidHost() => clearField(1);
@$pb.TagNumber(2)
ServerReflectionRequest get originalRequest => $_getN(1);
@$pb.TagNumber(2)
set originalRequest(ServerReflectionRequest v) => setField(2, v);
@$pb.TagNumber(2)
$core.bool hasOriginalRequest() => $_has(1);
@$pb.TagNumber(2)
void clearOriginalRequest() => clearField(2);
@$pb.TagNumber(2)
ServerReflectionRequest ensureOriginalRequest() => $_ensure(1);
@$pb.TagNumber(4)
FileDescriptorResponse get fileDescriptorResponse => $_getN(2);
@$pb.TagNumber(4)
set fileDescriptorResponse(FileDescriptorResponse v) => setField(4, v);
@$pb.TagNumber(4)
$core.bool hasFileDescriptorResponse() => $_has(2);
@$pb.TagNumber(4)
void clearFileDescriptorResponse() => clearField(4);
@$pb.TagNumber(4)
FileDescriptorResponse ensureFileDescriptorResponse() => $_ensure(2);
@$pb.TagNumber(5)
ExtensionNumberResponse get allExtensionNumbersResponse => $_getN(3);
@$pb.TagNumber(5)
set allExtensionNumbersResponse(ExtensionNumberResponse v) => setField(5, v);
@$pb.TagNumber(5)
$core.bool hasAllExtensionNumbersResponse() => $_has(3);
@$pb.TagNumber(5)
void clearAllExtensionNumbersResponse() => clearField(5);
@$pb.TagNumber(5)
ExtensionNumberResponse ensureAllExtensionNumbersResponse() => $_ensure(3);
@$pb.TagNumber(6)
ListServiceResponse get listServicesResponse => $_getN(4);
@$pb.TagNumber(6)
set listServicesResponse(ListServiceResponse v) => setField(6, v);
@$pb.TagNumber(6)
$core.bool hasListServicesResponse() => $_has(4);
@$pb.TagNumber(6)
void clearListServicesResponse() => clearField(6);
@$pb.TagNumber(6)
ListServiceResponse ensureListServicesResponse() => $_ensure(4);
@$pb.TagNumber(7)
ErrorResponse get errorResponse => $_getN(5);
@$pb.TagNumber(7)
set errorResponse(ErrorResponse v) => setField(7, v);
@$pb.TagNumber(7)
$core.bool hasErrorResponse() => $_has(5);
@$pb.TagNumber(7)
void clearErrorResponse() => clearField(7);
@$pb.TagNumber(7)
ErrorResponse ensureErrorResponse() => $_ensure(5);
}
class FileDescriptorResponse extends $pb.GeneratedMessage {
factory FileDescriptorResponse({
$core.Iterable<$core.List<$core.int>>? fileDescriptorProto,
}) {
final result = create();
if (fileDescriptorProto != null) result.fileDescriptorProto.addAll(fileDescriptorProto);
return result;
}
FileDescriptorResponse._() : super();
factory FileDescriptorResponse.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo('FileDescriptorResponse',
package: const $pb.PackageName('grpc.reflection.v1alpha'),
createEmptyInstance: create)
..p<$core.List<$core.int>>(1, 'fileDescriptorProto', $pb.PbFieldType.PY)
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
FileDescriptorResponse createEmptyInstance() => create();
static FileDescriptorResponse create() => FileDescriptorResponse._();
@$core.override
FileDescriptorResponse clone() => FileDescriptorResponse()..mergeFromMessage(this);
static $core.List<FileDescriptorResponse> createRepeated() => <FileDescriptorResponse>[];
@$pb.TagNumber(1)
$core.List<$core.List<$core.int>> get fileDescriptorProto => $_getList(0);
}
class ExtensionNumberResponse extends $pb.GeneratedMessage {
factory ExtensionNumberResponse({
$core.String? baseTypeName,
$core.Iterable<$core.int>? extensionNumber,
}) {
final result = create();
if (baseTypeName != null) result.baseTypeName = baseTypeName;
if (extensionNumber != null) result.extensionNumber.addAll(extensionNumber);
return result;
}
ExtensionNumberResponse._() : super();
factory ExtensionNumberResponse.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo('ExtensionNumberResponse',
package: const $pb.PackageName('grpc.reflection.v1alpha'),
createEmptyInstance: create)
..aOS(1, 'baseTypeName')
..p<$core.int>(2, 'extensionNumber', $pb.PbFieldType.P3)
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
ExtensionNumberResponse createEmptyInstance() => create();
static ExtensionNumberResponse create() => ExtensionNumberResponse._();
@$core.override
ExtensionNumberResponse clone() => ExtensionNumberResponse()..mergeFromMessage(this);
static $core.List<ExtensionNumberResponse> createRepeated() => <ExtensionNumberResponse>[];
@$pb.TagNumber(1)
$core.String get baseTypeName => $_getSZ(0);
@$pb.TagNumber(1)
set baseTypeName($core.String v) => $_setString(0, v);
@$pb.TagNumber(1)
$core.bool hasBaseTypeName() => $_has(0);
@$pb.TagNumber(1)
void clearBaseTypeName() => clearField(1);
@$pb.TagNumber(2)
$core.List<$core.int> get extensionNumber => $_getList(1);
}
class ListServiceResponse extends $pb.GeneratedMessage {
factory ListServiceResponse({
$core.Iterable<ServiceResponse>? service,
}) {
final result = create();
if (service != null) result.service.addAll(service);
return result;
}
ListServiceResponse._() : super();
factory ListServiceResponse.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo('ListServiceResponse',
package: const $pb.PackageName('grpc.reflection.v1alpha'),
createEmptyInstance: create)
..pc<ServiceResponse>(1, 'service', $pb.PbFieldType.PM,
subBuilder: ServiceResponse.create)
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
ListServiceResponse createEmptyInstance() => create();
static ListServiceResponse create() => ListServiceResponse._();
@$core.override
ListServiceResponse clone() => ListServiceResponse()..mergeFromMessage(this);
static $core.List<ListServiceResponse> createRepeated() => <ListServiceResponse>[];
@$pb.TagNumber(1)
$core.List<ServiceResponse> get service => $_getList(0);
}
class ServiceResponse extends $pb.GeneratedMessage {
factory ServiceResponse({
$core.String? name,
}) {
final result = create();
if (name != null) result.name = name;
return result;
}
ServiceResponse._() : super();
factory ServiceResponse.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo('ServiceResponse',
package: const $pb.PackageName('grpc.reflection.v1alpha'),
createEmptyInstance: create)
..aOS(1, 'name')
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
ServiceResponse createEmptyInstance() => create();
static ServiceResponse create() => ServiceResponse._();
@$core.override
ServiceResponse clone() => ServiceResponse()..mergeFromMessage(this);
static $core.List<ServiceResponse> createRepeated() => <ServiceResponse>[];
@$pb.TagNumber(1)
$core.String get name => $_getSZ(0);
@$pb.TagNumber(1)
set name($core.String v) => $_setString(0, v);
@$pb.TagNumber(1)
$core.bool hasName() => $_has(0);
@$pb.TagNumber(1)
void clearName() => clearField(1);
}
class ErrorResponse extends $pb.GeneratedMessage {
factory ErrorResponse({
$core.int? errorCode,
$core.String? errorMessage,
}) {
final result = create();
if (errorCode != null) result.errorCode = errorCode;
if (errorMessage != null) result.errorMessage = errorMessage;
return result;
}
ErrorResponse._() : super();
factory ErrorResponse.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo('ErrorResponse',
package: const $pb.PackageName('grpc.reflection.v1alpha'),
createEmptyInstance: create)
..a<$core.int>(1, 'errorCode', $pb.PbFieldType.O3)
..aOS(2, 'errorMessage')
..hasRequiredFields = false;
@$core.override
$pb.BuilderInfo get info_ => _i;
@$core.override
ErrorResponse createEmptyInstance() => create();
static ErrorResponse create() => ErrorResponse._();
@$core.override
ErrorResponse clone() => ErrorResponse()..mergeFromMessage(this);
static $core.List<ErrorResponse> createRepeated() => <ErrorResponse>[];
@$pb.TagNumber(1)
$core.int get errorCode => $_getIZ(0);
@$pb.TagNumber(1)
set errorCode($core.int v) => $_setSignedInt32(0, v);
@$pb.TagNumber(1)
$core.bool hasErrorCode() => $_has(0);
@$pb.TagNumber(1)
void clearErrorCode() => clearField(1);
@$pb.TagNumber(2)
$core.String get errorMessage => $_getSZ(1);
@$pb.TagNumber(2)
set errorMessage($core.String v) => $_setString(1, v);
@$pb.TagNumber(2)
$core.bool hasErrorMessage() => $_has(1);
@$pb.TagNumber(2)
void clearErrorMessage() => clearField(2);
}

View File

@ -0,0 +1,64 @@
// Generated code - do not modify
// ignore_for_file: annotate_overrides, camel_case_types, library_prefixes
// ignore_for_file: use_super_parameters, unused_import
// Based on grpc.reflection.v1alpha.reflection.proto
import 'dart:async' as $async;
import 'dart:core' as $core;
import 'package:grpc/grpc.dart' as $grpc;
import 'reflection.pb.dart' as $0;
export 'reflection.pb.dart';
class ServerReflectionClient extends $grpc.Client {
static final _$serverReflectionInfo =
$grpc.ClientMethod<$0.ServerReflectionRequest, $0.ServerReflectionResponse>(
'/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo',
($0.ServerReflectionRequest value) => value.writeToBuffer(),
($core.List<$core.int> value) => $0.ServerReflectionResponse.fromBuffer(value),
);
ServerReflectionClient(
$grpc.ClientChannel channel, {
$grpc.CallOptions? options,
$core.Iterable<$grpc.ClientInterceptor>? interceptors,
}) : super(
channel,
options: options,
interceptors: interceptors,
);
$grpc.ResponseStream<$0.ServerReflectionResponse> serverReflectionInfo(
$async.Stream<$0.ServerReflectionRequest> request, {
$grpc.CallOptions? options,
}) {
return $createStreamingCall(
_$serverReflectionInfo,
request,
options: options,
);
}
}
abstract class ServerReflectionServiceBase extends $grpc.Service {
@$core.override
$core.String get $name => 'grpc.reflection.v1alpha.ServerReflection';
ServerReflectionServiceBase() {
$addMethod($grpc.ServiceMethod<$0.ServerReflectionRequest, $0.ServerReflectionResponse>(
'ServerReflectionInfo',
serverReflectionInfo,
true,
true,
($core.List<$core.int> value) => $0.ServerReflectionRequest.fromBuffer(value),
($0.ServerReflectionResponse value) => value.writeToBuffer(),
));
}
$async.Stream<$0.ServerReflectionResponse> serverReflectionInfo(
$grpc.ServiceCall call,
$async.Stream<$0.ServerReflectionRequest> request,
);
}