Add classes used for better management of errors
parent
827564ca05
commit
20e3d863ed
|
@ -0,0 +1,49 @@
|
||||||
|
export type Result<L, A> = Failure<L, A> | Success<L, A>;
|
||||||
|
|
||||||
|
export class Failure<L, A> {
|
||||||
|
readonly value: L;
|
||||||
|
|
||||||
|
constructor(value: L) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
isFailure(): this is Failure<L, A> {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
isSuccess(): this is Success<L, A> {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
applyOnSuccess<B>(_: (a: A) => B): Result<L, B> {
|
||||||
|
return this as any;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Success<L, A> {
|
||||||
|
readonly value: A;
|
||||||
|
|
||||||
|
constructor(value: A) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
isFailure(): this is Failure<L, A> {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
isSuccess(): this is Success<L, A> {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
applyOnSuccess<B>(func: (a: A) => B): Result<L, B> {
|
||||||
|
return new Success(func(this.value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const failure = <L, A>(l: L): Result<L, A> => {
|
||||||
|
return new Failure(l);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const success = <L, A>(a: A): Result<L, A> => {
|
||||||
|
return new Success<L, A>(a);
|
||||||
|
};
|
Loading…
Reference in New Issue