/** @file This file defines the EFI REST JSON Structure Protocol interface. (C) Copyright 2020 Hewlett Packard Enterprise Development LP
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[out] 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