Skip to content

Commit d26f6f6

Browse files
committed
Align exceptions with Amplify v2 AmplifyException pattern\n\nSwitch AmplifyKinesisException to extend amplify_core's\nAmplifyException instead of amplify_foundation_dart's.\nAdopt positional message, optional recoverySuggestion,\nunderlyingException (was cause), const constructors,\nand runtimeTypeName overrides."
1 parent ed9a2ea commit d26f6f6

File tree

2 files changed

+46
-44
lines changed

2 files changed

+46
-44
lines changed
Lines changed: 42 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0
33

4-
import 'package:amplify_foundation_dart/amplify_foundation_dart.dart';
4+
import 'package:amplify_core/amplify_core.dart';
55
import 'package:aws_kinesis_datastreams_dart/src/exception/record_cache_exception.dart';
66

77
/// Default recovery suggestion for errors.
@@ -13,10 +13,10 @@ const String defaultRecoverySuggestion =
1313
/// {@endtemplate}
1414
sealed class AmplifyKinesisException extends AmplifyException {
1515
/// {@macro aws_kinesis_datastreams.amplify_kinesis_exception}
16-
AmplifyKinesisException({
17-
required super.message,
18-
required super.recoverySuggestion,
19-
super.cause,
16+
const AmplifyKinesisException(
17+
super.message, {
18+
super.recoverySuggestion,
19+
super.underlyingException,
2020
});
2121

2222
/// Maps an arbitrary error into the appropriate [AmplifyKinesisException]
@@ -36,49 +36,47 @@ sealed class AmplifyKinesisException extends AmplifyException {
3636
final RecordCacheDatabaseException e => KinesisStorageException(
3737
e.message,
3838
recoverySuggestion: e.recoverySuggestion,
39-
cause: e.cause,
39+
underlyingException: e.cause,
40+
),
41+
final Exception e => KinesisUnknownException(
42+
e.toString(),
43+
underlyingException: e,
4044
),
41-
final Exception e => KinesisUnknownException(e.toString(), cause: e),
4245
_ => KinesisUnknownException(error.toString()),
4346
};
44-
45-
@override
46-
String toString() {
47-
final buf = StringBuffer('AmplifyKinesisException: $message');
48-
if (recoverySuggestion.isNotEmpty) {
49-
buf.write('\nRecovery suggestion: $recoverySuggestion');
50-
}
51-
if (cause != null) buf.write('\nCaused by: $cause');
52-
return buf.toString();
53-
}
5447
}
5548

5649
/// {@template aws_kinesis_datastreams.kinesis_storage_exception}
5750
/// Thrown when a local cache/database error occurs.
5851
/// {@endtemplate}
5952
final class KinesisStorageException extends AmplifyKinesisException {
6053
/// {@macro aws_kinesis_datastreams.kinesis_storage_exception}
61-
KinesisStorageException(
62-
String message, {
63-
String? recoverySuggestion,
64-
super.cause,
65-
}) : super(
66-
message: message,
67-
recoverySuggestion: recoverySuggestion ?? defaultRecoverySuggestion,
68-
);
54+
const KinesisStorageException(
55+
super.message, {
56+
super.recoverySuggestion,
57+
super.underlyingException,
58+
});
59+
60+
@override
61+
String get runtimeTypeName => 'KinesisStorageException';
6962
}
7063

7164
/// {@template aws_kinesis_datastreams.kinesis_limit_exceeded_exception}
7265
/// Thrown when the local cache is full.
7366
/// {@endtemplate}
7467
final class KinesisLimitExceededException extends AmplifyKinesisException {
7568
/// {@macro aws_kinesis_datastreams.kinesis_limit_exceeded_exception}
76-
KinesisLimitExceededException({String? message, String? recoverySuggestion})
77-
: super(
78-
message: message ?? 'Cache is full',
79-
recoverySuggestion:
80-
recoverySuggestion ?? 'Call flush() or clearCache().',
81-
);
69+
const KinesisLimitExceededException({
70+
String? message,
71+
String? recoverySuggestion,
72+
}) : super(
73+
message ?? 'Cache is full',
74+
recoverySuggestion:
75+
recoverySuggestion ?? 'Call flush() or clearCache().',
76+
);
77+
78+
@override
79+
String get runtimeTypeName => 'KinesisLimitExceededException';
8280
}
8381

8482
/// {@template aws_kinesis_datastreams.kinesis_validation_exception}
@@ -87,30 +85,34 @@ final class KinesisLimitExceededException extends AmplifyKinesisException {
8785
/// {@endtemplate}
8886
final class KinesisValidationException extends AmplifyKinesisException {
8987
/// {@macro aws_kinesis_datastreams.kinesis_validation_exception}
90-
KinesisValidationException(String message, {String? recoverySuggestion})
91-
: super(
92-
message: message,
93-
recoverySuggestion: recoverySuggestion ?? defaultRecoverySuggestion,
94-
);
88+
const KinesisValidationException(super.message, {super.recoverySuggestion});
89+
90+
@override
91+
String get runtimeTypeName => 'KinesisValidationException';
9592
}
9693

9794
/// {@template aws_kinesis_datastreams.kinesis_unknown_exception}
9895
/// Catch-all for unexpected errors.
9996
/// {@endtemplate}
10097
final class KinesisUnknownException extends AmplifyKinesisException {
10198
/// {@macro aws_kinesis_datastreams.kinesis_unknown_exception}
102-
KinesisUnknownException(String message, {super.cause})
103-
: super(message: message, recoverySuggestion: defaultRecoverySuggestion);
99+
const KinesisUnknownException(super.message, {super.underlyingException});
100+
101+
@override
102+
String get runtimeTypeName => 'KinesisUnknownException';
104103
}
105104

106105
/// {@template aws_kinesis_datastreams.client_closed_exception}
107106
/// Thrown when an operation is attempted on a closed client.
108107
/// {@endtemplate}
109108
final class ClientClosedException extends AmplifyKinesisException {
110109
/// {@macro aws_kinesis_datastreams.client_closed_exception}
111-
ClientClosedException()
110+
const ClientClosedException()
112111
: super(
113-
message: 'Client has been closed',
112+
'Client has been closed',
114113
recoverySuggestion: 'Create a new AmplifyKinesisClient instance.',
115114
);
115+
116+
@override
117+
String get runtimeTypeName => 'ClientClosedException';
116118
}

packages/kinesis/aws_kinesis_datastreams_dart/test/amplify_kinesis_exception_test.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import 'package:test/test.dart';
88
void main() {
99
group('AmplifyKinesisException.from', () {
1010
test('passes through AmplifyKinesisException unchanged', () {
11-
final original = KinesisStorageException('msg');
11+
const original = KinesisStorageException('msg');
1212
final result = AmplifyKinesisException.from(original);
1313
expect(identical(result, original), isTrue);
1414
});
@@ -37,7 +37,7 @@ void main() {
3737
expect(result, isA<KinesisStorageException>());
3838
expect(result.message, 'db error');
3939
expect(result.recoverySuggestion, 'retry');
40-
expect(result.cause, underlying);
40+
expect(result.underlyingException, underlying);
4141
},
4242
);
4343

@@ -59,15 +59,15 @@ void main() {
5959
final cause = Exception('something unexpected');
6060
final result = AmplifyKinesisException.from(cause);
6161
expect(result, isA<KinesisUnknownException>());
62-
expect(result.cause, cause);
62+
expect(result.underlyingException, cause);
6363
});
6464

6565
test('converts non-Exception error to KinesisUnknownException', () {
6666
const error = 'a string error';
6767
final result = AmplifyKinesisException.from(error);
6868
expect(result, isA<KinesisUnknownException>());
6969
expect(result.message, 'a string error');
70-
expect(result.cause, isNull);
70+
expect(result.underlyingException, isNull);
7171
});
7272
});
7373
}

0 commit comments

Comments
 (0)