/**
 * Copyright (C) 2018 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.
 */

package android.hardware.fastboot@1.0;

enum Status : uint32_t {
    /**
     * Operation completed without errors.
     */
    SUCCESS,
    /**
     * Unsupported operation.
     */
    NOT_SUPPORTED,
    /**
     * Bad argument.
     */
    INVALID_ARGUMENT,
    /**
     * Operation failed due to unknown reason.
     */
    FAILURE_UNKNOWN
};

enum FileSystemType : uint8_t {
    /**
     * Fourth extended file system.
     */
    EXT4,
    /**
     * Flash Friendly File System.
     */
    F2FS,
    /**
     * Raw file system.
     */
    RAW
};

struct Result {
    Status status;
    /**
     * Message pertaining to the status. It must be a failure message for
     * Status FAILURE_UNKNOWN/NOT_SUPPORTED or an informative message for
     * Status SUCCESS.
     */
    string message;
};
