Merge branch 'feat/inda-383-daily-stat' into 'main'
[ProtonMail-WebClient.git] / packages / docs-shared / lib / Result.ts
blob04dd3c9eceba79bfdf62b5c71d3980c38eb9fff3
1 export class Result<T> {
2   constructor(
3     private isSuccess: boolean,
4     private error?: string,
5     private value?: T,
6   ) {
7     Object.freeze(this)
8   }
10   isFailed(): boolean {
11     return !this.isSuccess
12   }
14   getValue(): T {
15     if (!this.isSuccess) {
16       throw new Error(`Cannot get value of an unsuccessful result: ${this.error}`)
17     }
19     return this.value as T
20   }
22   getError(): string {
23     if (this.isSuccess || this.error === undefined) {
24       throw new Error('Cannot get an error of a successful result')
25     }
27     return this.error
28   }
30   static ok<U>(value?: U): Result<U> {
31     return new Result<U>(true, undefined, value)
32   }
34   static fail<U>(error: string): Result<U> {
35     if (!error) {
36       throw new Error('Attempting to create a failed result without an error')
37     }
39     return new Result<U>(false, error)
40   }