Remove generated `StatusCode` (#703)

* Remove generated `StatusCode`

* Rev version for breaking change

* Upgrade min sdk version

* Fix issues
This commit is contained in:
Moritz 2024-04-25 04:45:40 -07:00 committed by GitHub
parent bdbe5f5003
commit 078fd23bca
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 33 additions and 337 deletions

View File

@ -16,7 +16,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
sdk: [3.0.0, dev]
sdk: [3.2.0, dev]
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- uses: dart-lang/setup-dart@fedb1266e91cf51be2fdb382869461a434b920a3
@ -60,7 +60,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
sdk: [3.0.0, dev]
sdk: [3.2.0, dev]
platform: [vm, chrome]
exclude:
# We only run Chrome tests on Linux. No need to run them

View File

@ -1,6 +1,7 @@
## 3.2.5
## 4.0.0
* Set compressed flag correctly for grpc-encoding = identity. Fixes [#669](https://github.com/grpc/grpc-dart/issues/669) (https://github.com/grpc/grpc-dart/pull/693)
* Remove generated status codes.
## 3.2.4

View File

@ -15,7 +15,6 @@
// ignore: dangling_library_doc_comments
/// Status detail types and error codes
export 'package:grpc/src/generated/google/rpc/code.pbenum.dart';
export 'package:grpc/src/generated/google/rpc/error_details.pb.dart';
export 'src/auth/auth.dart' show BaseAuthenticator;

View File

@ -69,7 +69,7 @@ class _CredentialsRefreshingAuthenticator extends HttpBasedAuthenticator {
await super.authenticate(metadata, uri);
if (_quotaProject != null) {
// https://cloud.google.com/apis/docs/system-parameters#definitions
metadata['X-Goog-User-Project'] = _quotaProject!;
metadata['X-Goog-User-Project'] = _quotaProject;
}
}

View File

@ -58,7 +58,7 @@ class ChannelCredentials {
if (!isSecure) return null;
if (_certificateBytes != null) {
return createSecurityContext(false)
..setTrustedCertificatesBytes(_certificateBytes!,
..setTrustedCertificatesBytes(_certificateBytes,
password: _certificatePassword);
}
final context = SecurityContext(withTrustedRoots: true);

View File

@ -1,14 +0,0 @@
//
// Generated code. Do not modify.
// source: google/rpc/code.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
export 'code.pbenum.dart';

View File

@ -1,79 +0,0 @@
//
// Generated code. Do not modify.
// source: google/rpc/code.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
/// The canonical error codes for gRPC APIs.
///
///
/// Sometimes multiple error codes may apply. Services should return
/// the most specific error code that applies. For example, prefer
/// `OUT_OF_RANGE` over `FAILED_PRECONDITION` if both codes apply.
/// Similarly prefer `NOT_FOUND` or `ALREADY_EXISTS` over `FAILED_PRECONDITION`.
class Code extends $pb.ProtobufEnum {
static const Code OK = Code._(0, _omitEnumNames ? '' : 'OK');
static const Code CANCELLED = Code._(1, _omitEnumNames ? '' : 'CANCELLED');
static const Code UNKNOWN = Code._(2, _omitEnumNames ? '' : 'UNKNOWN');
static const Code INVALID_ARGUMENT =
Code._(3, _omitEnumNames ? '' : 'INVALID_ARGUMENT');
static const Code DEADLINE_EXCEEDED =
Code._(4, _omitEnumNames ? '' : 'DEADLINE_EXCEEDED');
static const Code NOT_FOUND = Code._(5, _omitEnumNames ? '' : 'NOT_FOUND');
static const Code ALREADY_EXISTS =
Code._(6, _omitEnumNames ? '' : 'ALREADY_EXISTS');
static const Code PERMISSION_DENIED =
Code._(7, _omitEnumNames ? '' : 'PERMISSION_DENIED');
static const Code UNAUTHENTICATED =
Code._(16, _omitEnumNames ? '' : 'UNAUTHENTICATED');
static const Code RESOURCE_EXHAUSTED =
Code._(8, _omitEnumNames ? '' : 'RESOURCE_EXHAUSTED');
static const Code FAILED_PRECONDITION =
Code._(9, _omitEnumNames ? '' : 'FAILED_PRECONDITION');
static const Code ABORTED = Code._(10, _omitEnumNames ? '' : 'ABORTED');
static const Code OUT_OF_RANGE =
Code._(11, _omitEnumNames ? '' : 'OUT_OF_RANGE');
static const Code UNIMPLEMENTED =
Code._(12, _omitEnumNames ? '' : 'UNIMPLEMENTED');
static const Code INTERNAL = Code._(13, _omitEnumNames ? '' : 'INTERNAL');
static const Code UNAVAILABLE =
Code._(14, _omitEnumNames ? '' : 'UNAVAILABLE');
static const Code DATA_LOSS = Code._(15, _omitEnumNames ? '' : 'DATA_LOSS');
static const $core.List<Code> values = <Code>[
OK,
CANCELLED,
UNKNOWN,
INVALID_ARGUMENT,
DEADLINE_EXCEEDED,
NOT_FOUND,
ALREADY_EXISTS,
PERMISSION_DENIED,
UNAUTHENTICATED,
RESOURCE_EXHAUSTED,
FAILED_PRECONDITION,
ABORTED,
OUT_OF_RANGE,
UNIMPLEMENTED,
INTERNAL,
UNAVAILABLE,
DATA_LOSS,
];
static final $core.Map<$core.int, Code> _byValue =
$pb.ProtobufEnum.initByValue(values);
static Code? valueOf($core.int value) => _byValue[value];
const Code._($core.int v, $core.String n) : super(v, n);
}
const _omitEnumNames = $core.bool.fromEnvironment('protobuf.omit_enum_names');

View File

@ -1,47 +0,0 @@
//
// Generated code. Do not modify.
// source: google/rpc/code.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use codeDescriptor instead')
const Code$json = {
'1': 'Code',
'2': [
{'1': 'OK', '2': 0},
{'1': 'CANCELLED', '2': 1},
{'1': 'UNKNOWN', '2': 2},
{'1': 'INVALID_ARGUMENT', '2': 3},
{'1': 'DEADLINE_EXCEEDED', '2': 4},
{'1': 'NOT_FOUND', '2': 5},
{'1': 'ALREADY_EXISTS', '2': 6},
{'1': 'PERMISSION_DENIED', '2': 7},
{'1': 'UNAUTHENTICATED', '2': 16},
{'1': 'RESOURCE_EXHAUSTED', '2': 8},
{'1': 'FAILED_PRECONDITION', '2': 9},
{'1': 'ABORTED', '2': 10},
{'1': 'OUT_OF_RANGE', '2': 11},
{'1': 'UNIMPLEMENTED', '2': 12},
{'1': 'INTERNAL', '2': 13},
{'1': 'UNAVAILABLE', '2': 14},
{'1': 'DATA_LOSS', '2': 15},
],
};
/// Descriptor for `Code`. Decode as a `google.protobuf.EnumDescriptorProto`.
final $typed_data.Uint8List codeDescriptor = $convert.base64Decode(
'CgRDb2RlEgYKAk9LEAASDQoJQ0FOQ0VMTEVEEAESCwoHVU5LTk9XThACEhQKEElOVkFMSURfQV'
'JHVU1FTlQQAxIVChFERUFETElORV9FWENFRURFRBAEEg0KCU5PVF9GT1VORBAFEhIKDkFMUkVB'
'RFlfRVhJU1RTEAYSFQoRUEVSTUlTU0lPTl9ERU5JRUQQBxITCg9VTkFVVEhFTlRJQ0FURUQQEB'
'IWChJSRVNPVVJDRV9FWEhBVVNURUQQCBIXChNGQUlMRURfUFJFQ09ORElUSU9OEAkSCwoHQUJP'
'UlRFRBAKEhAKDE9VVF9PRl9SQU5HRRALEhEKDVVOSU1QTEVNRU5URUQQDBIMCghJTlRFUk5BTB'
'ANEg8KC1VOQVZBSUxBQkxFEA4SDQoJREFUQV9MT1NTEA8=');

View File

@ -1,186 +0,0 @@
// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.rpc;
option go_package = "google.golang.org/genproto/googleapis/rpc/code;code";
option java_multiple_files = true;
option java_outer_classname = "CodeProto";
option java_package = "com.google.rpc";
option objc_class_prefix = "RPC";
// The canonical error codes for gRPC APIs.
//
//
// Sometimes multiple error codes may apply. Services should return
// the most specific error code that applies. For example, prefer
// `OUT_OF_RANGE` over `FAILED_PRECONDITION` if both codes apply.
// Similarly prefer `NOT_FOUND` or `ALREADY_EXISTS` over `FAILED_PRECONDITION`.
enum Code {
// Not an error; returned on success
//
// HTTP Mapping: 200 OK
OK = 0;
// The operation was cancelled, typically by the caller.
//
// HTTP Mapping: 499 Client Closed Request
CANCELLED = 1;
// Unknown error. For example, this error may be returned when
// a `Status` value received from another address space belongs to
// an error space that is not known in this address space. Also
// errors raised by APIs that do not return enough error information
// may be converted to this error.
//
// HTTP Mapping: 500 Internal Server Error
UNKNOWN = 2;
// The client specified an invalid argument. Note that this differs
// from `FAILED_PRECONDITION`. `INVALID_ARGUMENT` indicates arguments
// that are problematic regardless of the state of the system
// (e.g., a malformed file name).
//
// HTTP Mapping: 400 Bad Request
INVALID_ARGUMENT = 3;
// The deadline expired before the operation could complete. For operations
// that change the state of the system, this error may be returned
// even if the operation has completed successfully. For example, a
// successful response from a server could have been delayed long
// enough for the deadline to expire.
//
// HTTP Mapping: 504 Gateway Timeout
DEADLINE_EXCEEDED = 4;
// Some requested entity (e.g., file or directory) was not found.
//
// Note to server developers: if a request is denied for an entire class
// of users, such as gradual feature rollout or undocumented whitelist,
// `NOT_FOUND` may be used. If a request is denied for some users within
// a class of users, such as user-based access control, `PERMISSION_DENIED`
// must be used.
//
// HTTP Mapping: 404 Not Found
NOT_FOUND = 5;
// The entity that a client attempted to create (e.g., file or directory)
// already exists.
//
// HTTP Mapping: 409 Conflict
ALREADY_EXISTS = 6;
// The caller does not have permission to execute the specified
// operation. `PERMISSION_DENIED` must not be used for rejections
// caused by exhausting some resource (use `RESOURCE_EXHAUSTED`
// instead for those errors). `PERMISSION_DENIED` must not be
// used if the caller can not be identified (use `UNAUTHENTICATED`
// instead for those errors). This error code does not imply the
// request is valid or the requested entity exists or satisfies
// other pre-conditions.
//
// HTTP Mapping: 403 Forbidden
PERMISSION_DENIED = 7;
// The request does not have valid authentication credentials for the
// operation.
//
// HTTP Mapping: 401 Unauthorized
UNAUTHENTICATED = 16;
// Some resource has been exhausted, perhaps a per-user quota, or
// perhaps the entire file system is out of space.
//
// HTTP Mapping: 429 Too Many Requests
RESOURCE_EXHAUSTED = 8;
// The operation was rejected because the system is not in a state
// required for the operation's execution. For example, the directory
// to be deleted is non-empty, an rmdir operation is applied to
// a non-directory, etc.
//
// Service implementors can use the following guidelines to decide
// between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`:
// (a) Use `UNAVAILABLE` if the client can retry just the failing call.
// (b) Use `ABORTED` if the client should retry at a higher level
// (e.g., when a client-specified test-and-set fails, indicating the
// client should restart a read-modify-write sequence).
// (c) Use `FAILED_PRECONDITION` if the client should not retry until
// the system state has been explicitly fixed. E.g., if an "rmdir"
// fails because the directory is non-empty, `FAILED_PRECONDITION`
// should be returned since the client should not retry unless
// the files are deleted from the directory.
//
// HTTP Mapping: 400 Bad Request
FAILED_PRECONDITION = 9;
// The operation was aborted, typically due to a concurrency issue such as
// a sequencer check failure or transaction abort.
//
// See the guidelines above for deciding between `FAILED_PRECONDITION`,
// `ABORTED`, and `UNAVAILABLE`.
//
// HTTP Mapping: 409 Conflict
ABORTED = 10;
// The operation was attempted past the valid range. E.g., seeking or
// reading past end-of-file.
//
// Unlike `INVALID_ARGUMENT`, this error indicates a problem that may
// be fixed if the system state changes. For example, a 32-bit file
// system will generate `INVALID_ARGUMENT` if asked to read at an
// offset that is not in the range [0,2^32-1], but it will generate
// `OUT_OF_RANGE` if asked to read from an offset past the current
// file size.
//
// There is a fair bit of overlap between `FAILED_PRECONDITION` and
// `OUT_OF_RANGE`. We recommend using `OUT_OF_RANGE` (the more specific
// error) when it applies so that callers who are iterating through
// a space can easily look for an `OUT_OF_RANGE` error to detect when
// they are done.
//
// HTTP Mapping: 400 Bad Request
OUT_OF_RANGE = 11;
// The operation is not implemented or is not supported/enabled in this
// service.
//
// HTTP Mapping: 501 Not Implemented
UNIMPLEMENTED = 12;
// Internal errors. This means that some invariants expected by the
// underlying system have been broken. This error code is reserved
// for serious errors.
//
// HTTP Mapping: 500 Internal Server Error
INTERNAL = 13;
// The service is currently unavailable. This is most likely a
// transient condition, which can be corrected by retrying with
// a backoff. Note that it is not always safe to retry
// non-idempotent operations.
//
// See the guidelines above for deciding between `FAILED_PRECONDITION`,
// `ABORTED`, and `UNAVAILABLE`.
//
// HTTP Mapping: 503 Service Unavailable
UNAVAILABLE = 14;
// Unrecoverable data loss or corruption.
//
// HTTP Mapping: 500 Internal Server Error
DATA_LOSS = 15;
}

View File

@ -170,7 +170,7 @@ class ServerHandler extends ServiceCall {
final acceptedEncodings =
clientMetadata!['grpc-accept-encoding']?.split(',') ?? [];
_callEncodingCodec = acceptedEncodings
.map(_codecRegistry!.lookup)
.map(_codecRegistry.lookup)
.firstWhere((c) => c != null, orElse: () => null);
}

View File

@ -18,7 +18,6 @@
import 'dart:convert';
import 'package:grpc/src/generated/google/protobuf/any.pb.dart';
import 'package:grpc/src/generated/google/rpc/code.pb.dart';
import 'package:grpc/src/generated/google/rpc/error_details.pb.dart';
import 'package:grpc/src/generated/google/rpc/status.pb.dart';
import 'package:meta/meta.dart';
@ -151,6 +150,28 @@ class StatusCode {
static int fromHttpStatus(int status) {
return _httpStatusToGrpcStatus[status] ?? StatusCode.unknown;
}
/// Creates a string from a gRPC status code.
static String? name(int status) => switch (status) {
ok => 'OK',
cancelled => 'CANCELLED',
unknown => 'UNKNOWN',
invalidArgument => 'INVALID_ARGUMENT',
deadlineExceeded => 'DEADLINE_EXCEEDED',
notFound => 'NOT_FOUND',
alreadyExists => 'ALREADY_EXISTS',
permissionDenied => 'PERMISSION_DENIED',
resourceExhausted => 'RESOURCE_EXHAUSTED',
failedPrecondition => 'FAILED_PRECONDITION',
aborted => 'ABORTED',
outOfRange => 'OUT_OF_RANGE',
unimplemented => 'UNIMPLEMENTED',
internal => 'INTERNAL',
unavailable => 'UNAVAILABLE',
dataLoss => 'DATA_LOSS',
unauthenticated => 'UNAUTHENTICATED',
int() => null,
};
}
class GrpcError implements Exception {
@ -308,7 +329,8 @@ class GrpcError implements Exception {
code = StatusCode.unauthenticated;
/// Given a status code, return the name
String get codeName => (Code.valueOf(code) ?? Code.UNKNOWN).name;
String get codeName =>
StatusCode.name(code) ?? StatusCode.name(StatusCode.unknown)!;
@override
bool operator ==(other) {

View File

@ -1,11 +1,11 @@
name: grpc
description: Dart implementation of gRPC, a high performance, open-source universal RPC framework.
version: 3.2.5
version: 4.0.0
repository: https://github.com/grpc/grpc-dart
environment:
sdk: ^3.0.0
sdk: ^3.2.0
dependencies:
archive: ^3.0.0