diff --git a/lib/api/grpc_discovery.dart b/lib/api/grpc_discovery.dart new file mode 100644 index 0000000..5748a8d --- /dev/null +++ b/lib/api/grpc_discovery.dart @@ -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 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> 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 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> 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> 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> discoverAllServices() async { + final serviceNames = await listServices(); + final List discoveredServices = []; + + for (final serviceName in serviceNames) { + try { + final descriptors = await getFileDescriptorsForSymbol(serviceName); + final methods = []; + + 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> discoverServicesMatching(String pattern) async { + final services = await discoverAllServices(); + final lowerPattern = pattern.toLowerCase(); + return services + .where((s) => s.name.toLowerCase().contains(lowerPattern)) + .toList(); + } + + Stream _createRequestStream( + List 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 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> discoverAndPrintServices({ + GrpcConfig config = GrpcConfig.development, +}) async { + final discovery = GrpcDiscoveryClient(config: config); + + try { + final services = await discovery.discoverAllServices(); + final Map result = {}; + + for (final service in services) { + result[service.name] = service; + } + + return result; + } finally { + await discovery.close(); + } +} diff --git a/lib/generated/descriptor.pb.dart b/lib/generated/descriptor.pb.dart new file mode 100644 index 0000000..03a7b5c --- /dev/null +++ b/lib/generated/descriptor.pb.dart @@ -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? messageType, + $core.Iterable? enumType, + $core.Iterable? service, + $core.Iterable? 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(4, 'messageType', $pb.PbFieldType.PM, + subBuilder: DescriptorProto.create) + ..pc(5, 'enumType', $pb.PbFieldType.PM, + subBuilder: EnumDescriptorProto.create) + ..pc(6, 'service', $pb.PbFieldType.PM, + subBuilder: ServiceDescriptorProto.create) + ..pc(7, 'extension', $pb.PbFieldType.PM, + subBuilder: FieldDescriptorProto.create) + ..aOM(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 get messageType => $_getList(3); + + @$pb.TagNumber(5) + $core.List get enumType => $_getList(4); + + @$pb.TagNumber(6) + $core.List get service => $_getList(5); + + @$pb.TagNumber(7) + $core.List 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? field, + $core.Iterable? extension, + $core.Iterable? nestedType, + $core.Iterable? enumType, + $core.Iterable? reservedRange, + $core.Iterable<$core.String>? reservedName, + $core.Iterable? 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(2, 'field', $pb.PbFieldType.PM, + subBuilder: FieldDescriptorProto.create) + ..pc(6, 'extension', $pb.PbFieldType.PM, + subBuilder: FieldDescriptorProto.create) + ..pc(3, 'nestedType', $pb.PbFieldType.PM, + subBuilder: DescriptorProto.create) + ..pc(4, 'enumType', $pb.PbFieldType.PM, + subBuilder: EnumDescriptorProto.create) + ..pc(9, 'reservedRange', $pb.PbFieldType.PM, + subBuilder: DescriptorProto_ReservedRange.create) + ..pPS(10, 'reservedName') + ..pc(8, 'oneofDecl', $pb.PbFieldType.PM, + subBuilder: OneofDescriptorProto.create) + ..aOM(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 get field => $_getList(1); + + @$pb.TagNumber(6) + $core.List get extension => $_getList(2); + + @$pb.TagNumber(3) + $core.List get nestedType => $_getList(3); + + @$pb.TagNumber(4) + $core.List get enumType => $_getList(4); + + @$pb.TagNumber(9) + $core.List get reservedRange => $_getList(5); + + @$pb.TagNumber(10) + $core.List<$core.String> get reservedName => $_getList(6); + + @$pb.TagNumber(8) + $core.List 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(4, 'label', $pb.PbFieldType.OE, + defaultOrMaker: FieldDescriptorProto_Label.LABEL_OPTIONAL, + valueOf: FieldDescriptorProto_Label.valueOf, + enumValues: FieldDescriptorProto_Label.values) + ..e(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(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 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 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? 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(2, 'value', $pb.PbFieldType.PM, + subBuilder: EnumValueDescriptorProto.create) + ..aOM(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 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? 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(2, 'method', $pb.PbFieldType.PM, + subBuilder: MethodDescriptorProto.create) + ..aOM(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 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(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); +} diff --git a/lib/generated/reflection.pb.dart b/lib/generated/reflection.pb.dart new file mode 100644 index 0000000..f1dd7c7 --- /dev/null +++ b/lib/generated/reflection.pb.dart @@ -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(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 createRepeated() => []; + + 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 createRepeated() => []; + + @$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(2, 'originalRequest', + subBuilder: ServerReflectionRequest.create) + ..aOM(4, 'fileDescriptorResponse', + subBuilder: FileDescriptorResponse.create) + ..aOM(5, 'allExtensionNumbersResponse', + subBuilder: ExtensionNumberResponse.create) + ..aOM(6, 'listServicesResponse', + subBuilder: ListServiceResponse.create) + ..aOM(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 createRepeated() => []; + + 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 createRepeated() => []; + + @$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 createRepeated() => []; + + @$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? 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(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 createRepeated() => []; + + @$pb.TagNumber(1) + $core.List 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 createRepeated() => []; + + @$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 createRepeated() => []; + + @$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); +} diff --git a/lib/generated/reflection.pbgrpc.dart b/lib/generated/reflection.pbgrpc.dart new file mode 100644 index 0000000..fb1e902 --- /dev/null +++ b/lib/generated/reflection.pbgrpc.dart @@ -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, + ); +}