/** @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 |