feat: integrate S3 storage adapter and update file upload functionality
This commit is contained in:
37
src/utils/types/results.ts
Normal file
37
src/utils/types/results.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
export type Result<T, E> = { ok: true; value: T } | { ok: false; error: E };
|
||||
export type TypedResult<T> = Result<T, Error>;
|
||||
|
||||
export function wrapBlocking<
|
||||
F extends (...args: never[]) => unknown,
|
||||
E = unknown,
|
||||
>(
|
||||
fn: F,
|
||||
mapError: (e: unknown) => E = (e) => e as E
|
||||
): (...args: Parameters<F>) => Result<ReturnType<F>, E> {
|
||||
return (...args) => {
|
||||
try {
|
||||
return { ok: true, value: fn(...args) as ReturnType<F> };
|
||||
} catch (e) {
|
||||
return { ok: false, error: mapError(e) };
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export function wrap<
|
||||
F extends (...args: never[]) => Promise<unknown>,
|
||||
E = unknown,
|
||||
>(
|
||||
fn: F,
|
||||
mapError: (e: unknown) => E = (e) => e as E
|
||||
): (...args: Parameters<F>) => Promise<Result<Awaited<ReturnType<F>>, E>> {
|
||||
return async (...args) => {
|
||||
try {
|
||||
return {
|
||||
ok: true,
|
||||
value: (await fn(...args)) as Awaited<ReturnType<F>>,
|
||||
};
|
||||
} catch (e) {
|
||||
return { ok: false, error: mapError(e) };
|
||||
}
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user