blob: 81be5ea3aed85483241529ecf4422eae38043d7f [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
export type Result<T> =
| { ok: true; data: T }
| { ok: false; error: { code: string; message: string; details?: unknown } };
export function ok<T>(data: T): Result<T> {
return { ok: true, data };
}
export function err(code: string, message: string, details?: unknown): Result<never> {
return { ok: false, error: { code, message, details } };
}
export async function tryResult<T>(fn: () => Promise<T>, errorCode: string): Promise<Result<T>> {
try {
return ok(await fn());
} catch (error) {
const message = error instanceof Error ? error.message : String(error);
return err(errorCode, message, error);
}
}