Skip to content

Commit

Permalink
Merge pull request #3 from joshuajaco/add-missing-rust-methods
Browse files Browse the repository at this point in the history
Add missing rust methods
  • Loading branch information
joshuajaco authored Jul 6, 2022
2 parents d3ee338 + b96249d commit f067bcf
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
10 changes: 10 additions & 0 deletions index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ type Methods<T, E> = {
unwrapOrElse: (fn: (error: E) => T) => T;
map: <U>(fn: (value: T) => U) => Result<U, E>;
mapError: <F>(fn: (error: E) => F) => Result<T, F>;
mapOr: <U>(_default: U, fn: (value: T) => U) => U;
mapOrElse: <U>(defaultFn: (error: E) => U, fn: (value: T) => U) => U;
and: <U>(result: Result<U, E>) => Result<U, E>;
andThen: <U>(fn: (value: T) => Result<U, E>) => Result<U, E>;
or: <F>(result: Result<T, F>) => Result<T, F>;
Expand Down Expand Up @@ -67,6 +69,14 @@ function createResult<T, E>(init: Attributes<T, E>): Result<T, E> {
if (init.ok) return createResult(init);
return createResult({ ok: false, error: fn(init.error) });
},
mapOr(_default, fn) {
if (init.ok) return fn(init.value);
return _default;
},
mapOrElse(defaultFn, fn) {
if (init.ok) return fn(init.value);
return defaultFn(init.error);
},
match(matcher) {
if (init.ok) return matcher.ok(init.value);
return matcher.error(init.error);
Expand Down
30 changes: 30 additions & 0 deletions test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,36 @@ assert(
)
);

// mapOr

assert.equal(
ok("foo").mapOr(42, (s) => s.length),
3
);

assert.equal(
error<string, string>("bar").mapOr(42, (s) => s.length),
42
);

// mapOrElse

assert.equal(
ok("foo").mapOrElse(
(_e) => 42,
(s) => s.length
),
3
);

assert.equal(
error<string, string>("bar").mapOrElse(
(e) => e.length * 3,
(s) => s.length
),
9
);

// and

assert(
Expand Down

0 comments on commit f067bcf

Please sign in to comment.