/** @file MockReportStatusCodeLib.h
  Google Test mocks for ReportStatusCodeLib

  Copyright (c) Microsoft Corporation.
  SPDX-License-Identifier: BSD-2-Clause-Patent
**/

#pragma once

#include <Library/GoogleTestLib.h>
#include <Library/FunctionMockLib.h>
extern "C" {
  #include <Uefi.h>
  #include <Library/ReportStatusCodeLib.h>
}

struct MockReportStatusCodeLib {
  MOCK_INTERFACE_DECLARATION (MockReportStatusCodeLib);

  MOCK_FUNCTION_DECLARATION (
    EFI_STATUS,
    ReportStatusCode,
    (
     IN EFI_STATUS_CODE_TYPE   Type,
     IN EFI_STATUS_CODE_VALUE  Value
    )
    );
  MOCK_FUNCTION_DECLARATION (
    EFI_STATUS,
    ReportStatusCodeWithDevicePath,
    (
     IN EFI_STATUS_CODE_TYPE            Type,
     IN EFI_STATUS_CODE_VALUE           Value,
     IN CONST EFI_DEVICE_PATH_PROTOCOL  *DevicePath
    )
    );
  MOCK_FUNCTION_DECLARATION (
    EFI_STATUS,
    ReportStatusCodeWithExtendedData,
    (
     IN EFI_STATUS_CODE_TYPE   Type,
     IN EFI_STATUS_CODE_VALUE  Value,
     IN CONST VOID             *ExtendedData,
     IN UINTN                  ExtendedDataSize
    )
    );
  MOCK_FUNCTION_DECLARATION (
    EFI_STATUS,
    ReportStatusCodeEx,
    (
     IN EFI_STATUS_CODE_TYPE   Type,
     IN EFI_STATUS_CODE_VALUE  Value,
     IN UINT32                 Instance,
     IN CONST EFI_GUID         *CallerId          OPTIONAL,
     IN CONST EFI_GUID         *ExtendedDataGuid  OPTIONAL,
     IN CONST VOID             *ExtendedData      OPTIONAL,
     IN UINTN                  ExtendedDataSize
    )
    );
  MOCK_FUNCTION_DECLARATION (
    BOOLEAN,
    ReportProgressCodeEnabled,
    (
    )
    );
  MOCK_FUNCTION_DECLARATION (
    BOOLEAN,
    ReportErrorCodeEnabled,
    (
    )
    );
  MOCK_FUNCTION_DECLARATION (
    BOOLEAN,
    ReportDebugCodeEnabled,
    (
    )
    );
  MOCK_FUNCTION_DECLARATION (
    BOOLEAN,
    CodeTypeToPostCode,
    (
     IN  EFI_STATUS_CODE_TYPE   CodeType,
     IN  EFI_STATUS_CODE_VALUE  Value,
     OUT UINT8                  *PostCode
    )
    );
  MOCK_FUNCTION_DECLARATION (
    BOOLEAN,
    ReportStatusCodeExtractAssertInfo,
    (
     IN EFI_STATUS_CODE_TYPE        CodeType,
     IN EFI_STATUS_CODE_VALUE       Value,
     IN CONST EFI_STATUS_CODE_DATA  *Data,
     OUT CHAR8                      **Filename,
     OUT CHAR8                      **Description,
     OUT UINT32                     *LineNumber
    )
    );
  MOCK_FUNCTION_DECLARATION (
    BOOLEAN,
    ReportStatusCodeExtractDebugInfo,
    (
     IN CONST EFI_STATUS_CODE_DATA  *Data,
     OUT UINT32                     *ErrorLevel,
     OUT BASE_LIST                  *Marker,
     OUT CHAR8                      **Format
    )
    );
};
