| // Copyright (C) 2023 The Android Open Source Project | 
 | // | 
 | // Licensed 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 enum ResultStatus { | 
 |   PENDING = 'pending', | 
 |   SUCCESS = 'success', | 
 |   ERROR = 'error', | 
 | } | 
 |  | 
 | export interface PendingResult { | 
 |   status: ResultStatus.PENDING; | 
 | } | 
 |  | 
 | export interface ErrorResult { | 
 |   status: ResultStatus.ERROR; | 
 |   error: string; | 
 | } | 
 |  | 
 | export interface SuccessResult<T> { | 
 |   status: ResultStatus.SUCCESS; | 
 |   data: T; | 
 | } | 
 |  | 
 | export type Result<T> = PendingResult|ErrorResult|SuccessResult<T>; | 
 |  | 
 | export function isError<T>(result: Result<T>): result is ErrorResult { | 
 |   return result.status === ResultStatus.ERROR; | 
 | } | 
 |  | 
 | export function isPending<T>(result: Result<T>): result is PendingResult { | 
 |   return result.status === ResultStatus.PENDING; | 
 | } | 
 |  | 
 | export function isSuccess<T>(result: Result<T>): result is SuccessResult<T> { | 
 |   return result.status === ResultStatus.SUCCESS; | 
 | } | 
 |  | 
 | export function pending(): PendingResult { | 
 |   return {status: ResultStatus.PENDING}; | 
 | } | 
 |  | 
 | export function error(message: string): ErrorResult { | 
 |   return { | 
 |     status: ResultStatus.ERROR, | 
 |     error: message, | 
 |   }; | 
 | } | 
 |  | 
 | export function success<T>(data: T): SuccessResult<T> { | 
 |   return { | 
 |     status: ResultStatus.SUCCESS, | 
 |     data, | 
 |   }; | 
 | } |