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