blob: 7d37489b41e40b1d92572adff2c37f0ba8b0897c [file] [log] [blame]
/** @file
This file defines the EFI REST JSON Structure Protocol interface.
(C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Revision Reference:
This Protocol is introduced in UEFI Specification 2.8
**/
#ifndef EFI_REST_JSON_STRUCTURE_PROTOCOL_H_
#define EFI_REST_JSON_STRUCTURE_PROTOCOL_H_
///
/// GUID definitions
///
#define EFI_REST_JSON_STRUCTURE_PROTOCOL_GUID \
{ \
0xa9a048f6, 0x48a0, 0x4714, {0xb7, 0xda, 0xa9, 0xad,0x87, 0xd4, 0xda, 0xc9 } \
}
typedef struct _EFI_REST_JSON_STRUCTURE_PROTOCOL EFI_REST_JSON_STRUCTURE_PROTOCOL;
typedef CHAR8 * EFI_REST_JSON_RESOURCE_TYPE_DATATYPE;
///
/// Structure defintions of resource name space.
///
/// The fields declared in this structure define the
/// name and revision of payload delievered throught
/// REST API.
///
typedef struct _EFI_REST_JSON_RESOURCE_TYPE_NAMESPACE {
CHAR8 *ResourceTypeName; ///< Resource type name
CHAR8 *MajorVersion; ///< Resource major version
CHAR8 *MinorVersion; ///< Resource minor version
CHAR8 *ErrataVersion; ///< Resource errata version
} EFI_REST_JSON_RESOURCE_TYPE_NAMESPACE;
///
/// REST resource type identifier
///
/// REST resource type consists of name space and data type.
///
typedef struct _EFI_REST_JSON_RESOURCE_TYPE_IDENTIFIER {
EFI_REST_JSON_RESOURCE_TYPE_NAMESPACE NameSpace; ///< Namespace of this resource type.
EFI_REST_JSON_RESOURCE_TYPE_DATATYPE DataType; ///< Name of data type declared in this
///< resource type.
} EFI_REST_JSON_RESOURCE_TYPE_IDENTIFIER;
///
/// List of JSON to C structure conversions which this convertor supports.
///
typedef struct _EFI_REST_JSON_STRUCTURE_SUPPORTED {
LIST_ENTRY NextSupportedRsrcInterp; ///< Linklist to next supported conversion.
EFI_REST_JSON_RESOURCE_TYPE_IDENTIFIER RestResourceInterp; ///< JSON resource type this convertor supports.
} EFI_REST_JSON_STRUCTURE_SUPPORTED;
///
/// The header file of JSON C structure
///
typedef struct _EFI_REST_JSON_STRUCTURE_HEADER {
EFI_REST_JSON_RESOURCE_TYPE_IDENTIFIER JsonRsrcIdentifier; ///< Resource identifier which use to
///< choice the proper interpreter.
///< Follow by a pointer points to JSON structure, the content in the
///< JSON structure is implementation-specific according to converter producer.
VOID *JsonStructurePointer;
} EFI_REST_JSON_STRUCTURE_HEADER;
/**
JSON-IN C Structure-OUT function. Convert the given REST JSON resource into structure.
@param[in] This This is the EFI_REST_JSON_STRUCTURE_PROTOCOL instance.
@param[in] JsonRsrcIdentifier This indicates the resource type and version is given in
ResourceJsonText.
@param[in] ResourceJsonText REST JSON resource in text format.
@param[out] JsonStructure Pointer to receive the pointer to EFI_REST_JSON_STRUCTURE_HEADER
@retval EFI_SUCCESS
@retval Others
--*/
typedef
EFI_STATUS
(EFIAPI *EFI_REST_JSON_STRUCTURE_TO_STRUCTURE)(
IN EFI_REST_JSON_STRUCTURE_PROTOCOL *This,
IN EFI_REST_JSON_RESOURCE_TYPE_IDENTIFIER *JsonRsrcIdentifier OPTIONAL,
IN CHAR8 *ResourceJsonText,
OUT EFI_REST_JSON_STRUCTURE_HEADER **JsonStructure
);
/**
Convert the given REST JSON structure into JSON text.
@param[in] This This is the EFI_REST_JSON_STRUCTURE_PROTOCOL instance.
@param[in] JsonStructureHeader The point to EFI_REST_JSON_STRUCTURE_HEADER structure.
@param[out] ResourceJsonText Pointer to receive REST JSON resource in text format.
@retval EFI_SUCCESS
@retval Others
--*/
typedef
EFI_STATUS
(EFIAPI *EFI_REST_JSON_STRUCTURE_TO_JSON)(
IN EFI_REST_JSON_STRUCTURE_PROTOCOL *This,
IN EFI_REST_JSON_STRUCTURE_HEADER *JsonStructureHeader,
OUT CHAR8 **ResourceJsonText
);
/**
This function destroys the REST JSON structure.
@param[in] This This is the EFI_REST_JSON_STRUCTURE_PROTOCOL instance.
@param[in] JsonStructureHeader JSON structure to destroy.
@retval EFI_SUCCESS
@retval Others
--*/
typedef
EFI_STATUS
(EFIAPI *EFI_REST_JSON_STRUCTURE_DESTORY_STRUCTURE)(
IN EFI_REST_JSON_STRUCTURE_PROTOCOL *This,
IN EFI_REST_JSON_STRUCTURE_HEADER *JsonStructureHeader
);
/**
This function provides REST JSON resource to structure converter registration.
@param[in] This This is the EFI_REST_JSON_STRUCTURE_PROTOCOL instance.
@param[in] JsonStructureSupported The type and version of REST JSON resource which this converter
supports.
@param[in] ToStructure The function to convert REST JSON resource to structure.
@param[in] ToJson The function to convert REST JSON structure to JSON in text format.
@param[in] DestroyStructure Destroy REST JSON structure returned in ToStructure() function.
@retval EFI_SUCCESS Register successfully.
@retval Others Fail to register.
--*/
typedef
EFI_STATUS
(EFIAPI *EFI_REST_JSON_STRUCTURE_REGISTER)(
IN EFI_REST_JSON_STRUCTURE_PROTOCOL *This,
IN EFI_REST_JSON_STRUCTURE_SUPPORTED *JsonStructureSupported,
IN EFI_REST_JSON_STRUCTURE_TO_STRUCTURE ToStructure,
IN EFI_REST_JSON_STRUCTURE_TO_JSON ToJson,
IN EFI_REST_JSON_STRUCTURE_DESTORY_STRUCTURE DestroyStructure
);
///
/// EFI REST JSON to C structure protocol definition.
///
struct _EFI_REST_JSON_STRUCTURE_PROTOCOL {
EFI_REST_JSON_STRUCTURE_REGISTER Register; ///< Register JSON to C structure convertor
EFI_REST_JSON_STRUCTURE_TO_STRUCTURE ToStructure; ///< The function to convert JSON to C structure
EFI_REST_JSON_STRUCTURE_TO_JSON ToJson; ///< The function to convert C structure to JSON
EFI_REST_JSON_STRUCTURE_DESTORY_STRUCTURE DestoryStructure; ///< Destory C structure.
};
#endif