Skip to content

Commit

Permalink
feat: Add by Ok and Err typedef
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmah309 committed Nov 18, 2024
1 parent 4ef4626 commit be8cb76
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 18 deletions.
1 change: 0 additions & 1 deletion lib/anyhow.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ library anyhow;

export 'src/error.dart';

export 'package:rust/src/result/result.dart' show Ok, Err;
export 'package:rust/src/result/guard.dart';
export 'package:rust/src/result/record_to_result_extensions.dart';
export 'package:rust/src/result/result_extensions.dart';
1 change: 0 additions & 1 deletion lib/src/error.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import 'package:rust/rust.dart' as rust;
import 'package:rust/rust.dart';

part 'extensions.dart';
part 'result.dart';
Expand Down
12 changes: 6 additions & 6 deletions lib/src/extensions.dart
Original file line number Diff line number Diff line change
Expand Up @@ -41,21 +41,21 @@ extension AnyhowResultExtensions<S> on Result<S> {
Result<S> toAnyhowResult() => this;
}

extension AnyhowOkExtensions<S> on Ok<S, Error> {
extension AnyhowOkExtensions<S> on Ok<S> {
/// returns this
Ok<S, Error> context(Object context) {
Ok<S> context(Object context) {
return this;
}

/// returns this
Ok<S, Error> withContext(Object Function() fn) {
Ok<S> withContext(Object Function() fn) {
return this;
}
}

extension AnyhowErrExtensions<S> on Err<S, Error> {
extension AnyhowErrExtensions<S> on Err<S> {
/// Returns an [Error] with the additional context. The context should not be an instance of [Error].
Err<S, Error> context(Object context) {
Err<S> context(Object context) {
assert(context is! Error, _isAlreadyErrorAssertionMessage);
if (Error.hasStackTrace) {
return Err(Error._withStackTrace(context, StackTrace.current, parent: err));
Expand All @@ -65,7 +65,7 @@ extension AnyhowErrExtensions<S> on Err<S, Error> {

/// Lazily calls the function if the [Result] is an [Err] and returns an [Error] with the additional context.
/// The context should not be an instance of [Error].
Err<S, Error> withContext(Object Function() fn) {
Err<S> withContext(Object Function() fn) {
final context = fn();
assert(context is! Error, _isAlreadyErrorAssertionMessage);
if (Error.hasStackTrace) {
Expand Down
2 changes: 1 addition & 1 deletion lib/src/functions.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
part of 'error.dart';

/// Convenience function for turning an object into an anyhow [Err] Result.
Err<S, Error> bail<S>(Object err) {
Err<S> bail<S>(Object err) {
assert(err is! Error, _isAlreadyErrorAssertionMessage);
if (Error.hasStackTrace) {
return Err(Error._withStackTrace(err, StackTrace.current));
Expand Down
6 changes: 6 additions & 0 deletions lib/src/result.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,9 @@ typedef FutureResult<S> = Future<Result<S>>;

/// {@macro result}
typedef Result<S> = rust.Result<S, Error>;

/// {@macro ok}
typedef Ok<S> = rust.Ok<S, Error>;

/// {@macro err}
typedef Err<S> = rust.Err<S, Error>;
18 changes: 9 additions & 9 deletions test/result_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ void main() {

group('mapErr', () {
test('Ok', () {
const result = Ok<int, Error>(4);
const result = Ok<int>(4);
final result2 =
result.mapErr((error) => Error('=' * error.downcast<int>().unwrap()));

Expand Down Expand Up @@ -209,7 +209,7 @@ void main() {
test('Error', () {
final result = bail(4);
final result2 = result.andThenErr(
(error) => Err(('=' * error.downcast<int>().unwrap())));
(error) => bail(('=' * error.downcast<int>().unwrap())));

expect(result2.unwrapErr(), '====');
});
Expand Down Expand Up @@ -278,7 +278,7 @@ void main() {

group('unwrapOrNull', () {
test('Ok', () {
const result = Ok<int, Error>(0);
const result = Ok<int>(0);
final value = result.unwrapOrNull();
expect(value, 0);
});
Expand Down Expand Up @@ -379,10 +379,10 @@ void main() {
});

test("toResult on Iterable", () {
var result = [Ok<int, Error>(1), Ok<int, Error>(2), Ok<int, Error>(3)].toResult();
var result = [Ok<int>(1), Ok<int>(2), Ok<int>(3)].toResult();
expect(result.unwrap(), [1, 2, 3]);

result = [Ok<int, Error>(1), bail<int>(2), Ok<int, Error>(3)].toResult();
result = [Ok<int>(1), bail<int>(2), Ok<int>(3)].toResult();
expect(
result
.unwrapErr()
Expand All @@ -392,7 +392,7 @@ void main() {
.unwrap(),
2);

result = [Ok<int, Error>(1), bail<int>(2), bail<int>(3)].toResult();
result = [Ok<int>(1), bail<int>(2), bail<int>(3)].toResult();
expect(
result
.unwrapErr()
Expand All @@ -412,14 +412,14 @@ void main() {
});

test("merge on Iterable", () {
var result = [Ok<int, Error>(1), Ok<int, Error>(2), Ok<int, Error>(3)].merge();
var result = [Ok<int>(1), Ok<int>(2), Ok<int>(3)].merge();
expect(result.unwrap(), [1, 2, 3]);

result = [Ok<int, Error>(1), bail<int>(2), Ok<int, Error>(3)].merge();
result = [Ok<int>(1), bail<int>(2), Ok<int>(3)].merge();
expect(result.unwrapErr().downcast<int>().unwrap(), 2);
expect(result.unwrapErr().rootCause().downcast<int>().unwrap(), 2);

result = [Ok<int, Error>(1), bail<int>(2), bail<int>(3)].merge();
result = [Ok<int>(1), bail<int>(2), bail<int>(3)].merge();
expect(result.unwrapErr().downcast<int>().unwrap(), 3);
expect(result.unwrapErr().rootCause().downcast<int>().unwrap(), 2);
});
Expand Down

0 comments on commit be8cb76

Please sign in to comment.