1
1
// ignore_for_file: prefer-match-file-name
2
2
3
- typedef SuccessCallback <T , S , E > = T ? Function (Success <S , E > value);
4
- typedef ErrorCallback <T , S , E > = T ? Function (Error <S , E > value);
3
+ typedef SuccessCallback <T , S , E > = T Function (Success <S , E > value);
4
+ typedef ErrorCallback <T , S , E > = T Function (Error <S , E > value);
5
+
6
+ typedef NullableSuccessCallback <T , S , E > = T ? Function (Success <S , E > value);
7
+ typedef NullableErrorCallback <T , S , E > = T ? Function (Error <S , E > value);
8
+
9
+ typedef SuccessValueCallback <T , S > = T Function (S success);
10
+ typedef ErrorValueCallback <T , E > = T Function (E error);
5
11
6
12
/// Returns either Success [S] or Error [E] type.
7
13
sealed class Result <S , E > {
@@ -10,9 +16,19 @@ sealed class Result<S, E> {
10
16
const factory Result .success (S success) = Success <S , E >;
11
17
const factory Result .error (E error) = Error <S , E >;
12
18
19
+ TResult map <TResult extends Object ?>({
20
+ required SuccessCallback <TResult , S , E > success,
21
+ required ErrorCallback <TResult , S , E > error,
22
+ });
23
+
13
24
TResult ? mapOrNull <TResult extends Object ?>({
14
- SuccessCallback <TResult , S , E >? success,
15
- ErrorCallback <TResult , S , E >? error,
25
+ NullableSuccessCallback <TResult , S , E > success,
26
+ NullableErrorCallback <TResult , S , E > error,
27
+ });
28
+
29
+ TResult when < TResult extends Object ? > ({
30
+ required SuccessValueCallback <TResult , S > success,
31
+ required ErrorValueCallback <TResult , E > error,
16
32
});
17
33
}
18
34
@@ -21,25 +37,53 @@ final class Success<S, E> extends Result<S, E> {
21
37
22
38
const Success (this .success);
23
39
40
+ @override
41
+ TResult map <TResult extends Object ?>({
42
+ required SuccessCallback <TResult , S , E > success,
43
+ required ErrorCallback <TResult , S , E > error,
44
+ }) =>
45
+ success (this );
46
+
24
47
@override
25
48
TResult ? mapOrNull <TResult extends Object ?>({
26
- SuccessCallback <TResult , S , E >? success,
27
- ErrorCallback <TResult , S , E >? error,
49
+ NullableSuccessCallback <TResult , S , E >? success,
50
+ NullableErrorCallback <TResult , S , E >? error,
28
51
}) =>
29
52
success? .call (this );
53
+
54
+ @override
55
+ TResult when < TResult extends Object ? > ({
56
+ required SuccessValueCallback <TResult , S > success,
57
+ required ErrorValueCallback <TResult , E > error,
58
+ }) =>
59
+ success (this .success);
30
60
}
31
61
32
62
final class Error <S , E > extends Result <S , E > {
33
63
final E error;
34
64
35
65
const Error (this .error);
36
66
67
+ @override
68
+ TResult map <TResult extends Object ?>({
69
+ required SuccessCallback <TResult , S , E > success,
70
+ required ErrorCallback <TResult , S , E > error,
71
+ }) =>
72
+ error (this );
73
+
37
74
@override
38
75
TResult ? mapOrNull <TResult extends Object ?>({
39
- SuccessCallback <TResult , S , E >? success,
40
- ErrorCallback <TResult , S , E >? error,
76
+ NullableSuccessCallback <TResult , S , E >? success,
77
+ NullableErrorCallback <TResult , S , E >? error,
41
78
}) =>
42
79
error? .call (this );
80
+
81
+ @override
82
+ TResult when < TResult extends Object ? > ({
83
+ required SuccessValueCallback <TResult , S > success,
84
+ required ErrorValueCallback <TResult , E > error,
85
+ }) =>
86
+ error (this .error);
43
87
}
44
88
45
89
extension ResultExtension <S , E > on Result <S , E > {
0 commit comments